在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<Person> 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<String,List<Person >> personMap =
list.stream().collect(Collectors.groupingBy(Person::getName));
//遍历
for (Map.Entry<String, List<Person >> entry : personMap.entrySet()) { //key是分组条件name
//通过key取value,value是Person对象,可能有多个,用list取
List<Object> list11 = (List<Object>) personMap.get(entry.getKey());
}
}
最后:debug截图 观察结果更直观