我有一个A类的对象的列表:
List<A> list;
class A {
String name;
String lastname;
//Getter and Setter methods
}
我想将此列表转换为从名称到一组姓氏的映射:
Map<String, Set<String>> map;
例如,对于以下列表:
John Archer,John Agate,Tom Keinanen,Tom Barren,Cindy King
地图应为:
John-> {Archer,Agate},Tom-> {Keinanen,Barren},Cindy-> {King}
我尝试了以下代码,但是它返回了从名称到A类对象的映射:
list.stream.collect(groupingBy(A::getFirstName, toSet()));
答案 0 :(得分:4)
Map< String, Set<String>> map = list.stream()
.collect(
Collectors.groupingBy(
A::getFirstName, Collectors.mapping(
A::getLastName, Collectors.toSet())));
您在正确的轨道上需要使用:
Collectors.groupingBy
按firstName
分组。
,然后使用Collectors.mappping
之类的下游收集器作为Collectors.groupingBy
的第二个参数来映射到lastName
。
最后通过调用Set<String>
将其收集在Collectors.toSet
中:
答案 1 :(得分:2)
您从未告诉收集者提取姓氏。
我想你需要类似的东西
list.stream
.collect(groupingBy(
A::getFirstName, // The key is extracted.
mapping( // Map the stream of grouped values.
A::getLastName, // Extract last names.
toSet() // Collect them into a set.
)));