当前位置: 首页 > news >正文

Java 8 新特性 Stream 的使用场景(不定期更新)

方便在写代码的过程中直接使用,好记性不如好文章,直接 CV 改了直接用。提高 办(摸)公(鱼)效(时)率(间), 不然就直接问 GPT 也不是说不行。

只符合所筛选条件至多一条

CommonArea l = common.stream().filter(item ->item.getName().equals("aa")).findAny().orElse(null);

返回多条记录

List<Object> list = common.stream().filter(item -> item.getName().equals("aa")).collect(Collectors.toList())

根据条件判断是否存在

anyMatch:只要有一个就会返回 true

boolean exist = userData.userList.stream().anyMatch(u -> u.getUserName().equals(user.getUserName()));

allMatch:所有元素都满足就返回 true。

boolean exist = userData.userList.stream().allMatch(u -> u.getUserName().equals(user.getUserName()));

提取对象 List 中的某一字段生成新的 List:

List<String> bkMajor = list.stream().map(ZsbBkSchool::getBkMajor).collect(Collectors.toList());

提取对象 List 中的某几个字段生成新的 List:

List<UserVO> bkMajor = list.stream().map(user -> {UserVO vo = new UserVO();vo.setUserId(user.getUserId());vo.setUserName(user.getUserName());return vo;
}).collect(Collectors.toList());

List 集合转字符串,逗号隔开

// 如何把list集合拼接成以逗号分隔的字符串 a,b,c  
List<String> list = Arrays.asList("a", "b", "c"); // 第一种方法,可以用stream流  
String join = list.stream().collect(Collectors.joining(","));  
System.out.println(join); // 输出 a,b,c  // 第二种方法,其实String也有join方法可以实现这个功能  
String join = String.join(",", list);  
System.out.println(join); // 输出 a,b,c

List 选取两个字段转 Map

Map<Integer, String> map = list.stream().collect(Collectors.toMap(Entity::getId, Entity::getType));
// 上面的代码可能会报错(value 为 null 时)
Map<Integer, String> map = list.stream().collect(HashMap::new, (k, v) -> k.put(v.getId(), v.getType()),HashMap::putAll);

List 选取某一个字段作为key,value 为对象转为 Map

// 使用 Lambda 表达式
Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, User -> User));// 使用 Function.identity() 简洁写法,也是返回对象本身
Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));// 当 key 冲突的解决办法,这里选择第二个 key 覆盖第一个 key
Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key2));

List 选取某一个字段作为key,value 为 JSON 字符串

Map<String, String> collect = userList.stream().collect(Collectors.toMap(User::getOpenId, JSON::toJSONString));

List 选去某一个 BigDecimal 字段或其他数值字段进行相加

// 使用Stream的reduce方法将BigDecimal字段的值相加
BigDecimal sum = numbers.stream().reduce(BigDecimal.ZERO, BigDecimal::add);// 使用Stream的mapToInt和sum方法对Item对象的price字段进行累加
BigDecimal total = items.stream().map(Item::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);

List<Integer> 使用 stream 进行去重

List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5, 6, 6, 7);List<Integer> distinctNumbers = numbers.stream().distinct().collect(Collectors.toList());

后续将不定期更新 Stream 的骚操作使用,如果有其他更好的使用可以告知一下。

在这里插入图片描述

http://www.lryc.cn/news/220839.html

相关文章:

  • 公开IP属地信息如何保护用户的隐私?
  • 大桌子初步使用
  • 初步了解ORM框架之一Mybatis
  • 2023 electron最新最简版windows、mac打包、自动升级详解
  • Ubuntu18.04安装pcl-1.12.1,make时报错:/usr/bin/ld: cannot find -lvtkIOMPIImage
  • 表单验证不通过的一个点form中未定义这个字段
  • 最新、最全、最详细的 K8S 学习笔记总结
  • Emacs之高亮显示超过80个字符部分(一百三十)
  • C语言 每日一题 PTA 11.7 day13
  • 产品经理进阶:产品的起点是发现并理解问题
  • Java —— 类和对象(一)
  • RabbitMQ(高级特性)优先级队列
  • 盘点苹果手机导出照片到电脑的3个方法!
  • px、rpx、em以及rem的区别与用法
  • 类(class)
  • FPGA时序分析与约束(10)——生成时钟
  • A. Hit the Lottery
  • mvn: Downloading from pluginRepository
  • docker相关知识
  • Springboot 集成 RocketMQ(进阶-消息)
  • 10 索引优化与查询优化
  • linux PVE安装
  • ZZ038 物联网应用与服务赛题第J套
  • 【寒武纪(3)】媒体处理系统的系统控制、视频输入和后处理子系统
  • Linux下使用vscode编写Python项目
  • 使用 curator 连接 zookeeper 集群 Invalid config event received
  • 大促期间也要做好低价治理
  • 【c++】——类和对象(中)——默认成员函数(上)
  • 钉钉企业微应用开发C#-HTTP回调接口
  • Rust编程基础之条件表达式和循环