代码之家  ›  专栏  ›  技术社区  ›  Phil

Java:groupingbysubvalue作为值

  •  8
  • Phil  · 技术社区  · 7 年前

    比方说,我有一个对象Person,其字段类型为FirstName和LastName。现在我也有一个 List<Person>

    现在我要生成一个 Map<FirstName, List<LastName>>

    personList
    .stream()
    .collect(Collectors.groupingBy(
        Person::getFirstName,
        person -> person.getLastName() // this seems to be wrong
    ));
    

    但这似乎是分配地图值的错误方法。我该换什么?或者我应该用。减少 new HashMap<FirstName, List<LastName>>()

    3 回复  |  直到 7 年前
        1
  •  15
  •   Eugene    7 年前
    personList.stream()
              .collect(Collectors.groupingBy(
                   Person::getFirstName,
                   Collectors.mapping(Person::getLastName, Collectors.toList())));
    

    你正在寻找一个下游的收藏家 groupingBy

        2
  •  7
  •   Naman    7 年前

    这应该适合您:

    Map<String, List<String>> map = personList.stream()
                    .collect(Collectors.groupingBy(Person::getFirstName, 
                            Collectors.mapping(Person::getLastName, Collectors.toList())));
    
        3
  •  0
  •   Perimosh    7 年前

    我想你在找这样的东西:

    Map<String, Map<String, List>> map = personList.stream()
      .collect(groupingBy(Person::getFirstName, groupingBy(Person::getLastName)));