我以为我在Java 8流方面已经变得很不错了,但是后来...
我有一个Foo
界面:
public interface Foo {
String getKey();
Stream<Bar> bars();
}
我知道我可以使用每个键Stream<Foo>
将a收集到aMap<String, Foo>
中:
Map<String, Foo> foosByKey = fooStream.collect(
Collectors.toMap(Foo::getKey, Function.identity()));
但是,如果我想将它们收集到一个Map<Bar, Foo>
容器中怎么办?换句话说,对于Foo
蒸汽Foo
中的每个Bar
实例,我都希望将其放入映射中的键,该键对应于所返回的每个实例Foo.bars()
。我从哪里开始?
作为建议在这里,你会想提取Bar
从每个值Foo
,创造对他们来说。配对后,您可以将它们收集到中Map
。例如,
Map<Bar, Foo> map = fooStream.flatMap(foo -> foo.bars().map(bar -> new SimpleEntry<>(bar, foo)))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
我们SimpleEntry
在这里使用它是因为它可用(Java没有更简单的Pair
类型)。您可以编写自己的内容以更具体。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句