java利用lambda表达式遍历list

java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重。

优点: (1) 简洁,跟之前的传统写法对比,能少写不少代码;

(2) 易并行计算。尤其适用于遍历结果,循环计算数值或者赋值的时候非常方便。

缺点:(1) debug调试不方便;

(2) 在非并行时,效率并没有提高(未测试)

使用总结

1.forEach()

list.forEach(item->{

//执行逻辑

//item.setName(“测试”);

//item.getName();

});

2.stream()流操作

2.1 去重 关键字:distinct

list = list.stream().distinct().collect(Collectors.toList());

2.2 排序 根据对象的某个属性排序 关键字:sorted

list = list.stream().sorted(((o1, o2) -> o2.getId()-o1.getId())).collect(Collectors.toList());

简化版: list.sort(((o1, o2) -> {return o2.getId()-o1.getId();}));

多字段排序: list.sort(Comparator.comparing(User::getId).thenComparing(User::getAge));

说明: o2.getId()-o1.getId()的o2和o1的顺序决定升序或是降序

2.3 过滤 根据对象的某个属性过滤 关键字:filter

list = list.stream().filter(item->item.getId()>5).collect(Collectors.toList());

2.4 提取 取出对象的某个属性的集合 关键字:map

List idList = list.stream().map(user-> user.getId()).collect(Collectors.toList());

List idList = list.stream().map(User::getId).collect(Collectors.toList());

说明:提取有两种写法 ,第一种是Function表达式,可以加自己的判断

2.5 统计 获取对象某个属性的平均值 最大最小值登等 关键字: mapToDouble() mapToInt() mapToLong() average max min sum

num = list.stream().mapToInt(item -> item.getId()).average();

num = list.stream().mapToInt(item -> item.getId()).max();

num = list.stream().mapToInt(item -> item.getId()).min();

大数据计算: BigDecimal num= list.stream().map(User::getNum).reduce(BigDecimal.ZERO, BigDecimal::add); 说明: 需要注意null的情况,需要先过滤,或者重写方法

若要获取最值对应的对象:

Comparator comparator = Comparator.comparing(item -> item.getId);

User user = list.stream().max(comparator).get();

2.6 分组 根据对象的某个属性分组 关键字:Collectors.groupingBy

list.stream().collect(Collectors.groupingBy(item -> item.getId()));

说明: 还可以多重分组或者是多字段分组或者是统计分组后的某个属性的最大最小值等 关键字:Collectors.summarizingInt

2.7 转map

Map map = list.stream().collect(Collectors.toMap(item -> item.getId(),a -> a,(k1,k2)->k1));

说明:当key重复时会报错,所以需要加上 (k1,k2)->k1),表示有重复时,取k1的值

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值