我有以下代码:
ConcurrentMap<String, Zipper> zippers = list.parallelStream()
.map( f -> {return new Facet( f ) ; } )
.collect(
Collectors.groupingByConcurrent( Facet::getZip,
Collector.of( Zipper::new,
Zipper::accept,
(a,b)-> {a.combine(b); return a; } )
)) ;
for ( String key: zippers.keySet() )
{
zippers.get( key ).zip() ;
}
鉴于我只需要 Zipper 对象来调用它们上的 zip() 方法,有没有办法在每个对象创建后立即调用此方法作为流的一部分(并在调用 zip() 方法后立即丢弃这些对象)而不是首先必须创建一个映射?
您可能想要使用终结器的 4 参数Collector#of
。
请注意,f -> {return new Facet(f); }
可以写成Facet::new
ConcurrentMap<String, Zipper> zippers = list.parallelStream()
.map(Facet::new)
.collect(
Collectors.groupingByConcurrent(
Facet::getZip,
Collector.of( Zipper::new,
Zipper::accept,
(a,b)-> {a.combine(b); return a; },
z -> {z.zip(); return z;}
)
)
);