java8 lambda表达式Stream对List常用操作总结
List最为java编程语音使用最频繁的数据结构之一,经常涉及到对List数据的各种处理,以前我们只能通过遍历的方式,自己去逐条处理,java8提供了Stream能够满足大部分日常对List的操作,如分组,求和,过滤等等,并且效率比自己逐条遍历要快很多,代码也更加简洁。
首先创建一个Student测试的实体类如下
@Data
@ApiModel("学生实体类")
public class StudentEntity {@ApiModelProperty("主键")private Long id;@ApiModelProperty("学号")private String code;@ApiModelProperty("姓名")private String name;@ApiModelProperty("年龄")private Integer age;@ApiModelProperty("体重")private BigDecimal weight;@ApiModelProperty("性别")private String gender;
}
性别的值集我们使用一个枚举来处理
@Getter
@AllArgsConstructor
public enum Gender {/*** 男*/MALE("male", "男"),/*** 女*/FEMALE("female", "女");private String key;private String value;
}
下面就是对list的常用操作集合
@Log4j2
public class StreamHandler {public static void main(String[] args) {List<StudentEntity> list = new ArrayList<>();list.add(new StudentEntity(){{setId(1L);setCode("10012");setName("tom");setAge(13);setWeight(new BigDecimal("31.2"));setGender(Gender.MALE.getKey());}});list.add(new StudentEntity(){{setId(2L);setCode("10013");setName("jack");setAge(13);setWeight(new BigDecimal("28.9"));setGender(Gender.MALE.getKey());}});list.add(new StudentEntity(){{setId(3L);setCode("10010");setName("rose");setAge(12);setWeight(new BigDecimal("27.6"));setGender(Gender.FEMALE.getKey());}});log.info("original:{}",list);// 过滤掉体重大于30的学生List<StudentEntity> weightOverThirty = list.stream().filter(v -> v.getWeight().compareTo(new BigDecimal("30")) <= 0).collect(Collectors.toList());log.info("weightOverThirty:{}",weightOverThirty);// 查询年龄最小的学生StudentEntity minAgeStudent = list.stream().min(Comparator.comparing(StudentEntity::getAge)).get();log.info("minAgeStudent:{}",minAgeStudent);// 查询最大的年龄Integer maxAge = list.stream().map(StudentEntity::getAge).max(Integer::compareTo).get();log.info("maxAge:{}",maxAge);// 按照学号排序List<StudentEntity> sortedByCode = list.stream().sorted(Comparator.comparing(v->Long.parseLong(v.getCode()))).collect(Collectors.toList());log.info("sortedByCode:{}",sortedByCode);// 按照性别分组Map<String, List<StudentEntity>> groupedByGender = list.stream().collect(Collectors.groupingBy(StudentEntity::getGender));log.info("groupedByGender:{}",groupedByGender);// 求所有学生的体重之和BigDecimal weightSum = list.stream().map(StudentEntity::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);log.info("weightSum:{}",weightSum);}
}
测试打印日志如下
20:19:04.178 [main] INFO com.wuwl.alibabaexcellearning.helper.StreamHandler - original:[StudentEntity(id=1, code=10012, name=tom, age=13, weight=31.2, gender=male), StudentEntity(id=2, code=10013, name=jack, age=13, weight=28.9, gender=male), StudentEntity(id=3, code=10010, name=rose, age=12, weight=27.6, gender=female)]
20:19:04.195 [main] INFO com.wuwl.alibabaexcellearning.helper.StreamHandler - weightOverThirty:[StudentEntity(id=2, code=10013, name=jack, age=13, weight=28.9, gender=male), StudentEntity(id=3, code=10010, name=rose, age=12, weight=27.6, gender=female)]
20:19:04.199 [main] INFO com.wuwl.alibabaexcellearning.helper.StreamHandler - minAgeStudent:StudentEntity(id=3, code=10010, name=rose, age=12, weight=27.6, gender=female)
20:19:04.201 [main] INFO com.wuwl.alibabaexcellearning.helper.StreamHandler - maxAge:13
20:19:04.203 [main] INFO com.wuwl.alibabaexcellearning.helper.StreamHandler - sortedByCode:[StudentEntity(id=3, code=10010, name=rose, age=12, weight=27.6, gender=female), StudentEntity(id=1, code=10012, name=tom, age=13, weight=31.2, gender=male), StudentEntity(id=2, code=10013, name=jack, age=13, weight=28.9, gender=male)]
20:19:04.205 [main] INFO com.wuwl.alibabaexcellearning.helper.StreamHandler - groupedByGender:{female=[StudentEntity(id=3, code=10010, name=rose, age=12, weight=27.6, gender=female)], male=[StudentEntity(id=1, code=10012, name=tom, age=13, weight=31.2, gender=male), StudentEntity(id=2, code=10013, name=jack, age=13, weight=28.9, gender=male)]}
20:19:04.207 [main] INFO com.wuwl.alibabaexcellearning.helper.StreamHandler - weightSum:87.7
eg:
@Data
@Getter
@AllArgsConstructor
@Log4j2
为lombok的注解,相关功能可自行百度
@ApiModel
@ApiModelProperty
为swagger的常用注解,相信大家都比较熟悉的哈
java8 lambda表达式Stream对List常用操作总结相关推荐
- lambda表达式——Stream管道流的map操作
lambda表达式--Stream管道流的map操作 一.回顾Stream管道流map的基础用法 二.处理非字符串类型集合元素 三.再复杂一点:处理对象数据格式转换 四.flatMap 一.回顾Str ...
- lambda学习视频和stream学习视频(Java8 Lambda表达式视频教程)-Java爬虫-网络购物的正确打开方式
百度网盘 链接:https://pan.baidu.com/s/1upU5EVXOQeho6poDYdnhiQ 提取码:088l Java8 Lambda表达式视频教程 https://www.bil ...
- Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...
- java8 lambda表达式实现自定义用户组件,Don't Repeat Yourself
2019独角兽企业重金招聘Python工程师标准>>> 一.用户组件的功能 使用java8 lambda表达式实现实现世界的一个例子:用户组件.此用户组件有以下几个操作:获取用户列表 ...
- Java8————Lambda表达式(二)
译者注:文中内容均来自于官方教程<Lambda Expressions>,但是由于英汉语言的差异,部分语句官方描述过于冗余,因此译者根据通常状况的理解做了微调,但不会影响表达的含义.比如: ...
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- Java8 Lambda 表达式官方文档
本文是对官方文档的不完全翻译,如有错误请指正. Lambda 表达式 匿名类的实现非常简单,例如只包含一个方法的接口,在这些情况下,您通常会尝试将函数作为参数传递给另一个方法,例如当有人单击按钮时应采 ...
- Java8 Lambda表达式语法和示例
本文是对官方文档(https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)的概括总结,更详细的内容请看官方 ...
最新文章
- PHP eval函数
- Nordic nRF5 SDK和softdevice介绍
- 《编译原理》实验报告——基于YACC的TINY语法分析器的构建
- 动态规划——单词拆分(Leetcode 139)
- linux 环境下git的安装与配置
- 力扣-5773(243周赛)插入后的最大值
- 50个Android开发技巧(02 延迟载入和避免反复渲染视图)
- 算法时间复杂度O(1)
- matlab波形转换,matlab波形图怎么转换为矢量图并导出?
- QUST程序设计赛F题:Bash博弈
- Vue 豆瓣电影项目
- Backtrader策略实现(一) | 简单双均线
- 微信投票的自动运行脚本
- 蓝牙钥匙解决方案 BLE RSSI 测距
- 按键精灵 android版运行异常,按键精灵安卓版 tap、touch命令 不好用的解决办法!...
- 跨境支付的噱头,你读懂了吗?
- java swing写的双色球摇奖机
- 数据结构与算法——左程云06
- 基于javaweb的学籍管理系统计算机毕业论文java毕业设计选题源代码
- 什么是CW?CW通讯的优缺点是?
热门文章
- 建立.NET Core控制台应用程序以输出EXE?
- PostgreSQL自动增量
- 如何强制.NET应用程序以管理员身份运行?
- JavaScript中的“ new”关键字是什么?
- 如何在Shell脚本中漂亮地打印JSON?
- win11打开安全中心显示英文怎么办 windows11打开安全中心显示英文的解决方法
- moveit环境引入代码
- clion环境搭建c++_mingw64_clion中使用python,ros-qt
- 10A 的GROUP和CUI使用
- java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析