Java Stream 对List数据进行分组

395 阅读1分钟

实体类

public class Chain {
    private String upChainCd;
    private String stage;
    private String picHash;

    public String getUpChainCd() {
        return upChainCd;
    }

    public void setUpChainCd(String upChainCd) {
        this.upChainCd = upChainCd;
    }

    public String getStage() {
        return stage;
    }

    public void setStage(String stage) {
        this.stage = stage;
    }

    public String getPicHash() {
        return picHash;
    }

    public void setPicHash(String picHash) {
        this.picHash = picHash;
    }

    public Chain(String upChainCd, String stage, String picHash) {
        this.upChainCd = upChainCd;
        this.stage = stage;
        this.picHash = picHash;
    }

    @Override
    public String toString() {
        return "Chain [picHash=" + picHash + ", stage=" + stage + ", upChainCd=" + upChainCd + "]";
    }

    public Chain() {
    }

}

聚合

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.Iterator;
import java.util.Set;

public class Demo {
    public static void main(String[] args) {
        Chain chain1 = new Chain("test01", "01", "MD5MD5MD5");
        Chain chain2 = new Chain("test01", "12", "MD5MD5MD5");
        Chain chain3 = new Chain("test01", "02", "MD5MD5MD5");
        Chain chain4 = new Chain("test01", "03", "MD5MD5MD5");
        Chain chain5 = new Chain("test01", "06", "MD5MD5MD5");
        Chain chain6 = new Chain("test02", "01", "MD5MD5MD5");
        Chain chain7 = new Chain("test02", "12", "MD5MD5MD5");

        List<Chain> list = new ArrayList<Chain>();
        list.add(chain1);
        list.add(chain2);
        list.add(chain3);
        list.add(chain4);
        list.add(chain5);
        list.add(chain6);
        list.add(chain7);

        Map<String, List<Chain>> chainByUpChainCd = list.stream().collect(Collectors.groupingBy(Chain::getUpChainCd));

        Set<String> keys = chainByUpChainCd.keySet();

        Iterator<String> iter = keys.iterator();
        while (iter.hasNext()) {
            String str = iter.next();
            List<Chain> listChain = chainByUpChainCd.get(str);
            System.out.println("---------" + str + "---------");
            for (Chain chain : listChain) {
                System.out.println(chain);
            }
        }
    }
}

结果

C:\Users\PiLiPaLa\Desktop\J_Code\steam>java Demo
---------test02---------
Chain [picHash=MD5MD5MD5, stage=01, upChainCd=test02]
Chain [picHash=MD5MD5MD5, stage=12, upChainCd=test02]
---------test01---------
Chain [picHash=MD5MD5MD5, stage=01, upChainCd=test01]
Chain [picHash=MD5MD5MD5, stage=12, upChainCd=test01]
Chain [picHash=MD5MD5MD5, stage=02, upChainCd=test01]
Chain [picHash=MD5MD5MD5, stage=03, upChainCd=test01]
Chain [picHash=MD5MD5MD5, stage=06, upChainCd=test01]