使用lambda表达式将list中某一属性相同的数据分组

在java8之前可以使用遍历使用map进行分组。

而在 Java 8 lambda表达式出现后,可以使用 groupingBy 收集器,一行代码实现,简单方便:

//(第一个*表示实体类,第二个*表示实体类中属性,如果不是实体类,可直接写)
Map< x,x > Map = list.stream().collect(groupingBy(*::get*)); 

代码实现

新建Person实体类(get,set省略):

public class Person {

    private String name;
    private String sex;
    private String school;
    private int age;

    public Person(String name, String sex, String school, int age) {
        this.name = name;
        this.sex = sex;
        this.school = school;
        this.age = age;
    }
}

测试:

public static void main(String[] args){
//封装list开始
List list = new ArrayList();
Person person1 = new Person("张三", "男", "NYIST",1);
Person person2 = new Person("张三", "女", "NYIST",2);
Person person3 = new Person("李四", "男", "NYIST",3);
list.add(person1);
list.add(person2);
list.add(person3);
//封装list结束
//使用lambda表达式
Map> personMap =
list.stream().collect(Collectors.groupingBy(Person::getName));
//遍历
for (Map.Entry> entry : personMap.entrySet()) { //key是分组条件name
 //通过key取value,value是Person对象,可能有多个,用list取
    List list11 = (List) personMap.get(entry.getKey());
    }
}

最后:debug截图 观察结果更直观

使用lambda表达式将list中某一属性相同的数据分组_第1张图片

你可能感兴趣的:(《java基础》)