2014-11-28 5 views
0

: 난 단지 그들에 우편() 메소드를 호출 지퍼 객체를 필요자바 8 스트림, GROUPBY 및 방법은 호출

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

을 감안할 때,이 메소드를 호출하는 방법은 무엇입니까 먼저 각 객체를 만든 직후에 스트림의 일부로 (그리고 zip() 메서드가 호출 된 직후에 이러한 객체를 던져 버릴 수 있습니다.) 먼저 맵을 작성해야하는 것이 아니라?

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