使用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<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截图 观察结果更直观

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值