Java8的lambda用法总结

  1. 集合中抽取某一元素的集合
java 复制代码
// 抽取一个字段成为新的组合
List<String> list = userService.stream().map(User::getCreateId()).collect(Collectors.toList());
 // map形式的抽取
List<String> list =  userService.stream().map(e -> e.get("name")).collect(Collectors.toList());
  1. 集合去重
java 复制代码
//根据单个字段去重
List<Product> list = ProductService.list(new Product().setCreateUserId(nodeUser.getUserId())).stream().distinct().collect(Collectors.toList());

//根据多个字段去重 (id和年份 两字段去重)
List<GoalDetail> goList = goLists.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(goal -> go.getGoId()+";"+goal.getGoYear()))), ArrayList::new));

//简单字符串集合去重
List<String> list = Arrays.asList("111","222","333");
list.stream().distinct().forEach(System.out::println);
  1. 集合中抽取2个字段组成Map
java 复制代码
// 取出的多个字段组成的map格式        
Map<String, Integer> subejctMap = subjectList.stream().collect(Collectors.toMap(Subject::getName, Subject::getClockNumber));
  1. 筛选条件利用 filter设置相关条件得到相应的集合
java 复制代码
// 从人员列表中抽取性别为男生集合
List<User> manList = users.stream().filter(a -> a.getSex().equals(CommonConstants.ONE)).collect(Collectors.toList());
 
// 从map中抽取name不为空的集合
list.stream().filter((Map<String,Object>a) -> StringUtils.isNotBlank(a.get("name"))).collect(Collectors.toList())
  1. 集合排序
java 复制代码
// 此为对list进行排序,先正序后加上.reversed()进行倒序排列,不加则为正序
List<SysDept> depts = deptList.stream().sorted(Comparator.comparing(Dept::getOrder).reversed()).collect(Collectors.toList());
 
// 直接进行倒序排列
List<SysDept> depts = deptList.stream().sorted(Comparator.comparing(Dept::getOrder, Comparator.reverseOrder())).collect(Collectors.toList());
 
// 多字段排序
List<SysDept> depts = deptList.stream().sorted(Comparator.comparing(Dept::getOrder, Comparator.reverseOrder().thenComparing(Dept::getId))).collect(Collectors.toList());
 
// 排序后抽取其中一个字段来组成新的集合
List<String> valueList = resultList.stream().sorted(Comparator.comparing((Map<String, Object> e) -> (BigDecimal) e.get("amount")).reversed()).map(e -> String.valueOf(e.get("value"))).collect(Collectors.toList());

//简单字符串集合排序
List<String> list = Arrays.asList("111","222","333");
list.stream().sorted().forEach(System.out::println);
  1. 集合中某一字段相加求和
java 复制代码
// BigDecimal的分数一列的值求和  
BigDecimal intotalSorce = scorelist.stream().map(ScoreRecord::getScore).reduce(BigDecimal.ZERO, BigDecimal::add);
 
// Inteter的分数一列的值求和  
Integer allSum = list.stream().mapToInt(e -> StringUtils.isNotBlank(e.getLevel()) ? Integer.parseInt(e.getLevel()) : 0).sum();
 
// map中的BigDecimal 元素求和
BigDecimal totalNumber = list.stream().map(map -> JSONObject.parseObject(JSON.toJSONString(map)).getBigDecimal("number")).reduce(BigDecimal::add).get();
 
// map中的Integer 元素求和
Integer typeCount = list.stream().collect(Collectors.summingInt(map -> JSONObject.parseObject(JSON.toJSONString(map)).getInteger("typeCount")));
相关推荐
开开心心就好7 小时前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
Setsuna_F_Seiei10 小时前
前端转型 Agent 开发 05 之 Agent Hooks 与 Checkpointer(让 Agent 从全自动转变人为可掌控)
前端·agent·ai编程
十二同学啊11 小时前
向量数据库:从核心原理到 RAG 与 Java 实战
数据库
百万蹄蹄向前冲11 小时前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能
默_笙12 小时前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
蓝速科技12 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
linux_cfan13 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
kyriewen13 小时前
我扒了 10,221 条 JD:腾讯技术岗 75% 在要 AI
前端·人工智能·ai编程
郑州光合科技余经理14 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
IT_陈寒15 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端