java8利用流和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<Integer> idList = list.stream().map(user-> user.getId()).collect(Collectors.toList());
List<Integer> 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<User> 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的值
java8利用流和lambda表达式对list遍历处理的更多相关文章
- Java8新特性 1——利用流和Lambda表达式操作集合
Java8中可以用简洁的代码来操作集合,比如List,Map,他们的实现ArrayList.以此来实现Java8的充分利用CPU的目标. 流和Lambda表达式都是Java8中的新特性.流可以实现对集 ...
- Java8新特性 利用流和Lambda表达式对List集合进行处理
Lambda表达式处理List 最近在做项目的过程中经常会接触到 lambda 表达式,随后发现它基本上可以替代所有 for 循环,包括增强for循环.也就是我认为,绝大部分的for循环都可以用 la ...
- java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合
java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...
- Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...
- 夯实Java基础(二十二)——Java8新特性之Lambda表达式
1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ...
- 【Java8新特性】你知道Java8为什么要引入Lambda表达式吗?
写在前面 这是一道真实的面试题,一个读者朋友出去面试,面试官竟然问他这样一个问题:你说说Java8中为什么引入Lambda表达式?引入Lambda表达式后有哪些好处呢?还好这个朋友对Java8早有准备 ...
- 【Java8新特性】- Lambda表达式
Java8新特性 - Lambda表达式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...
- 再来看看Java8的新特征——lambda表达式
什么是lambda表达式? 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. 比如说new一个Thr ...
- Java8新特性之Lambda表达式
lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ...
- Java8特性详解 lambda表达式 Stream
1.lambda表达式 Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java正 ...
随机推荐
- CF1557总结
CF1557总结 Codeforces Round #737 (Div. 2) 先看了 A .意思是要把序列分成两个子序列,使得两序列各自平均值的和最小,输出最小值,要求 \(O(n)\) .想半天然 ...
- 宽字符集(unicode)操作函数 (转)
字符分类: 宽字符函数 普通C函数 描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() isc ...
- csss线条中间粗两边细
效果 <div class="hr-line-div"></div> .hr-line-div { margin: 0 auto; height: 2px; ...
- C# DataTable.Select()根据条件筛选数据
1.前言: 很多时候我们获取到一个表的时候需要根据表的包含的队列去筛选内容,一般来说可能想到的就是遍历整个表的内容进行条件筛选,但是这种方式增加了代码量且易出错,DataTable.Select()就 ...
- vue 打包后可放置在任意名称的文件夹下
1. build->utils.js: 2. build->webpack.prod.conf.js: 3. config->index.js:
- python3中的负数整除、求余问题
注:小白问题,大神们请忽略先看示例,非整除: >>> -10/3-3.3333333333333335>>> 10/-3-3.3333333333333335> ...
- 第15章 授权:保护您的应用程序(ASP.NET Core in Action, 2nd Edition)
本章包括 使用授权控制谁可以使用你的应用 对策略使用基于声明的授权 创建自定义策略以处理复杂的需求 根据所访问的资源授权请求 隐藏用户未经授权访问的Razor模板中的元素 在第14章中,我向您展示了如 ...
- 3DMAX2023卸载方法,如何完全彻底卸载删除清理干净3dmax各种残留注册表和文件?【转载】
3dmax2023卸载重新安装方法,使用清理卸载工具箱完全彻底删除干净3dmax2023各种残留注册表和文件.3dmax2023显示已安装或者报错出现提示安装未完成某些产品无法安装的问题,怎么完全彻底 ...
- 高并发解决方案之 redis原子操作(适用于秒杀场景)
秒杀活动: 秒杀场景一般会在电商网站或(APP/小程序)举行一些活动或者节假日在12306网站上抢票时遇到.对于一些稀缺或者特价商品,一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大 ...
- windows IIS http 自动转https
1.安装url重写组件 https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads 2.刷新IIS 3.添加规则