How does combiner in Stream.collect method work in java 8?

前端 未结 3 1829
轮回少年
轮回少年 2020-12-03 04:42

I created simple demo :

public static void main(String[] args) {
        List list2 = Arrays.asList(\"adf\", \"bcd\", \"abc\", \"hgr\", \"jyt\"         


        
3条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-03 05:29

    It is more interesting result with and without parallel for Raniz sample:

        String collect = list2.stream().collect(StringBuilder::new,
                (res, elem) -> {
                    System.out.printf("ACCUMULATE res=%s, elem=%s\n", res, elem);
                    res.append(" ").append(elem);
            },
                (res1, res2) -> {
                    System.out.printf("COMBINE res1=%s, res2=%s\n", res1, res2);
                    res1.append(res2.toString());
                }).toString();
    

    Without parallel combine never have been called:

    ACCUMULATE res=, elem=adf
    ACCUMULATE res= adf, elem=bcd
    ACCUMULATE res= adf bcd, elem=abc
    ACCUMULATE res= adf bcd abc, elem=hgr
    ACCUMULATE res= adf bcd abc hgr, elem=jyt
    ACCUMULATE res= adf bcd abc hgr jyt, elem=edr
    ACCUMULATE res= adf bcd abc hgr jyt edr, elem=biu
    collect= adf bcd abc hgr jyt edr biu
    

    And with parallel

    ACCUMULATE res=, elem=jyt
    ACCUMULATE res=, elem=hgr
    COMBINE res1= hgr, res2= jyt
    ACCUMULATE res=, elem=biu
    ACCUMULATE res=, elem=edr
    COMBINE res1= edr, res2= biu
    ACCUMULATE res=, elem=bcd
    COMBINE res1= hgr jyt, res2= edr biu
    ACCUMULATE res=, elem=abc
    ACCUMULATE res=, elem=adf
    COMBINE res1= bcd, res2= abc
    COMBINE res1= adf, res2= bcd abc
    COMBINE res1= adf bcd abc, res2= hgr jyt edr biu
    collect= adf bcd abc hgr jyt edr biu
    

提交回复
热议问题