Java stream 分组操作

根据单/多字段分组

单字段分组可以直接使用指定字段,多字段分组则采用拼接Key的形式

单字段:

//单字段分组
Map<String, List> singleAttr = list.stream().collect(
                Collectors.groupingBy(t -> t.getNativePlace()));
//还可以写成简化版
//Map<String, List> collect = list.stream().collect(
// Collectors.groupingBy(User::getNativePlace));

多字段:

//多字段分组
Map<String, List> multiAttr = list.stream().collect(
                Collectors.groupingBy(t -> t.getNativePlace()+"_"+t.getAge()));

多层级:

//多级分组
Map<String, Map<Integer, List>> multiLevel = list.stream().collect(
        Collectors.groupingBy(
                t -> t.getNativePlace(),
                Collectors.groupingBy(t -> t.getAge())
        )
);

测试

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args) {
        ArrayList list=new ArrayList();
        list.add(new User(11,"a"));
        list.add(new User(12,"a"));
        list.add(new User(14,"c"));
        list.add(new User(14,"c"));
        //单字段分组
        Map<String, List> singleAttr = list.stream().collect(Collectors.groupingBy(t -> t.getNativePlace()));
        //还可以写成简化版
        //Map<String, List> collect = list.stream().collect(Collectors.groupingBy(User::getNativePlace));
        //多字段分组
        Map<String, List> multiAttr = list.stream().collect(Collectors.groupingBy(t -> t.getNativePlace()+"_"+t.getAge()));
        //多级分组
        Map<String, Map<Integer, List>> multiLevel = list.stream().collect(
                Collectors.groupingBy(
                        t -> t.getNativePlace(),
                        Collectors.groupingBy(t -> t.getAge())
                )
        );
    }
}

class User{
    private int age;
    private String nativePlace;

    public String getNativePlace() {
        return nativePlace;
    }

    public void setNativePlace(String nativePlace) {
        this.nativePlace = nativePlace;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public User(int age,String nativePlace) {
        this.age = age;
        this.nativePlace=nativePlace;
    }
}

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/e3cb6eb897.html