Thi*_*aku 1 java lambda java-stream
我有一个Foo包含两个重要属性的列表,Bar bar和Baz baz.实例可以共享Bar值但具有唯一的Bazs.
我想将此List转换为Map,Baz以便共享a的所有实例的唯一值Bar放在映射到该共享的Set中Bar.
Map<Bar, Set<Baz>> m = new HashMap<>();
for (Foo foo : fooRepository.findAll()) {
if (m.containsKey(foo.bar)) {
m.get(foo.bar).add(foo.baz);
} else {
Set<Baz> set = new HashSet<>();
set.add(foo.baz);
m.put(foo.bar, set);
}
}
Run Code Online (Sandbox Code Playgroud)
我自己的功能印章尚未证明完成任务.我试图将两者reduce和collectList一起尝试但在尝试将不同的参数实现为lambdas时因类型问题而被绊倒.
尝试使用Collect
m = fooRepository.findAll().stream().collect(new HashMap<Bar, Set<Baz>>(), (m, foo)->m.merge(Foo::getBaz, s->s.add(foo.getBar()));
Run Code Online (Sandbox Code Playgroud)
不完整,编译器无法确定m或foo和Foo :: getBaz的类型.
Reduce不起作用,因为它不允许累加器与元素具有不同的值.
Map<Bar, Set<Baz>> m = fooRepository.findAll()
.stream()
.collect(Collectors.groupingBy(Foo::getBar,
Collectors.mapping(Foo::getBaz, Collectors.toSet())));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |