Java 8流,groupBy和方法调用

时间:2014-11-28 19:48:10

标签: java mapreduce java-8 java-stream

我有以下代码:

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()方法之后,而不是首先必须创建一个地图?

1 个答案:

答案 0 :(得分:3)

您可能想要使用终结器的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;}
            )
        )
    );