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正 ...
随机推荐
- python实现字典的排序
var dic = {c:4, a:2, d:3, b:1}; // 定义一个字典 console.log("输出最初的字典元素: "); for(var key in dic){ ...
- node.js 新手快速入门
我当初学的时候,是在大大们的指导下开始学习的,用了3天搞定大大们给的任务.下面我就把这个经历分享出来,让大家借鉴一下.欢迎吐槽~~ 任务如下: 根据Node js 开发入门教程第五章的一个使用node ...
- MAC截图快捷键有哪些?
在日常办公的时候,在遇到问题的时候使用截图会比打字方便的多,因为使用最频繁的是Windows系统,所以习惯用windows的截图快捷键进行截图.这时你会发现在MAC中这些快捷方式都是无效的,那么MAC ...
- (jmeter笔记)jmeter监控服务器资源
jmeter版本:5.2.1 jdk版本:1.8.0_191 监控服务器的CPU/memory.IO.硬盘等信息 1.下载jmeter-plugins-manager-1.4.jar 插件,解压之后把 ...
- 启动 RMAN 客户端并与之交互
启动和退出 RMAN RMAN 可执行文件与数据库一起自动安装,通常与其他数据库可执行文件位于同一目录中.例如,Linux 上的 RMAN 客户端位于$ORACLE_HOME/bin. 您有以下启动 ...
- 056_Connect or Sync to your Salesforce database by using an external database
Integrate Salesforce with an External database: https://help.salesforce.com/articleView?id=000109985 ...
- Docker-Compose编排与部署
Docker Compose (多个容器编排) 是一个定义及运行多个docker容器的工具,可以使用YAML文件来配置应用,使用命令,可以创建并启动配置中的所有服务.docker compose会通过 ...
- elasticsearch 根据主键_id更新部分字段
package com.better517na.ebookingbusiservice.helper;import com.alibaba.fastjson.JSON;import com.aliba ...
- linux开机自启动tomcat或者其他应用
开机自启动Tomcat: 1.创建一个脚本,touch tomcat_start.sh 2.编辑脚本,vim tomcat_start.sh #!/bin/sh #chkconfig: 2345 8 ...
- Java基础|03.基础语法(2)
Java安全|03.Java基础语法(2) 00x1 单例模式 定义: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一 ...