我有以下代码:

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;}
            )
        )
    );

10-07 18:19