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常用操作总结相关推荐

  1. lambda表达式——Stream管道流的map操作

    lambda表达式--Stream管道流的map操作 一.回顾Stream管道流map的基础用法 二.处理非字符串类型集合元素 三.再复杂一点:处理对象数据格式转换 四.flatMap 一.回顾Str ...

  2. lambda学习视频和stream学习视频(Java8 Lambda表达式视频教程)-Java爬虫-网络购物的正确打开方式

    百度网盘 链接:https://pan.baidu.com/s/1upU5EVXOQeho6poDYdnhiQ 提取码:088l Java8 Lambda表达式视频教程 https://www.bil ...

  3. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  4. java8 lambda表达式实现自定义用户组件,Don't Repeat Yourself

    2019独角兽企业重金招聘Python工程师标准>>> 一.用户组件的功能 使用java8 lambda表达式实现实现世界的一个例子:用户组件.此用户组件有以下几个操作:获取用户列表 ...

  5. Java8————Lambda表达式(二)

    译者注:文中内容均来自于官方教程<Lambda Expressions>,但是由于英汉语言的差异,部分语句官方描述过于冗余,因此译者根据通常状况的理解做了微调,但不会影响表达的含义.比如: ...

  6. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  7. 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  8. Java8 Lambda 表达式官方文档

    本文是对官方文档的不完全翻译,如有错误请指正. Lambda 表达式 匿名类的实现非常简单,例如只包含一个方法的接口,在这些情况下,您通常会尝试将函数作为参数传递给另一个方法,例如当有人单击按钮时应采 ...

  9. Java8 Lambda表达式语法和示例

    本文是对官方文档(https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)的概括总结,更详细的内容请看官方 ...

最新文章

  1. PHP eval函数
  2. Nordic nRF5 SDK和softdevice介绍
  3. 《编译原理》实验报告——基于YACC的TINY语法分析器的构建
  4. 动态规划——单词拆分(Leetcode 139)
  5. linux 环境下git的安装与配置
  6. 力扣-5773(243周赛)插入后的最大值
  7. 50个Android开发技巧(02 延迟载入和避免反复渲染视图)
  8. 算法时间复杂度O(1)
  9. matlab波形转换,matlab波形图怎么转换为矢量图并导出?
  10. QUST程序设计赛F题:Bash博弈
  11. Vue 豆瓣电影项目
  12. Backtrader策略实现(一) | 简单双均线
  13. 微信投票的自动运行脚本
  14. 蓝牙钥匙解决方案 BLE RSSI 测距
  15. 按键精灵 android版运行异常,按键精灵安卓版 tap、touch命令 不好用的解决办法!...
  16. 跨境支付的噱头,你读懂了吗?
  17. java swing写的双色球摇奖机
  18. 数据结构与算法——左程云06
  19. 基于javaweb的学籍管理系统计算机毕业论文java毕业设计选题源代码
  20. 什么是CW?CW通讯的优缺点是?

热门文章

  1. 建立.NET Core控制台应用程序以输出EXE?
  2. PostgreSQL自动增量
  3. 如何强制.NET应用程序以管理员身份运行?
  4. JavaScript中的“ new”关键字是什么?
  5. 如何在Shell脚本中漂亮地打印JSON?
  6. win11打开安全中心显示英文怎么办 windows11打开安全中心显示英文的解决方法
  7. moveit环境引入代码
  8. clion环境搭建c++_mingw64_clion中使用python,ros-qt
  9. 10A 的GROUP和CUI使用
  10. java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析