找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 508|回复: 5

[学习] Stream几种常见用法示例

[复制链接]
发表于 2023-8-25 11:10:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
(1)收集List对象的某个字段属性形成List(可加distinct去重)

  1. //List<YwdjpcrjcjlHVO> rjcList
  2. List<String> cbpcList= rjcList.stream().map(YwdjpcrjcjlHVO::getCbpc).distinct().collect(Collectors.toList());
复制代码
(2) 将List 对象集合,按某个属性或属性组合进行分组汇总
  1. //List<YwdjpcrjcjlHVO> rjcList

  2.                 Map<String,List<YwdjpcrjcjlHVO>> rjcjlMap=rjcList.stream().collect(Collectors.groupingBy(e -> e.getYzccode()+e.getScx()+e.getZzlxcode()));
复制代码
(3) 将List<String>对象或数组 进行拼接
  1. field = bomsxzList.stream().map(e -> e).collect(Collectors.joining(","));
复制代码
(4) 将list列表对象,转成按某个计算值为KEY的MAP
  1.   List<DyfbzVO> dyfbzList = (List<DyfbzVO>) getBaseDAO().executeQuery(sql.toString(), new BeanListProcessor(DyfbzVO.class));
  2.                 Map<String, DyfbzVO> cbjzlxMap = <b>dyfbzList.stream()
  3.                                 .collect(Collectors.toMap(e -> e.getType()+e.getVariety(), e -> e, (v1, v2) -> v2));</b>
复制代码
(5) 将集合对象循环用法:
  1. DyfglBVOArray<b>.stream().forEach(bodyEntity -></b> {
  2.       //statements
  3. });
复制代码
(6) List对象筛选过滤
  1.   List<YwdjfpswzxDetailHVO> tzList = <b>allList.stream().filter(e -> "2".equals(e.getZxzt()))</b>
  2.                                 .collect(Collectors.toList());
复制代码
(7) 并行流执行
  1. //pool : ForkJoinPool
复制代码
(8) 将list 集合分组执行
  1. int no = swfytzVOList.size() / maxSize + 1;
  2.                         for (int i = 0; i < no; i++) {
  3.       List<AggSwfytz> newList =<b> swfytzVOList.stream().skip(i * maxSize).limit(maxSize)</b>
  4.                .collect(Collectors.toList());
  5.       AggSwfytz[] vos = service.saveAggSwfytz(newList.toArray(new AggSwfytz[0]));
  6.      saveDataList.addAll(Arrays.asList(vos));
  7.                         }
复制代码


 楼主| 发表于 2023-8-25 11:17:01 | 显示全部楼层
补充转MAP的两种用法:
  1.                 Map<String, UFDouble> swbomMaxDays = swbomMaxDaysList.stream()
  2.                                 .collect(Collectors.toMap(e -> e.getZzlb(), e -> e.getDays(), (v1, v2) -> v2));

  3. //2
  4.                 Map<String, YwdjcbhsfpxsBVO> fpxs = fpxsList.stream()
  5.                                 .collect(Collectors.toMap(YwdjcbhsfpxsBVO::getZzlx, e -> e, (v1, v2) -> v2));
复制代码
回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2023-8-25 11:23:37 | 显示全部楼层
本帖最后由 zhou66 于 2023-8-25 11:26 编辑

(9) MapToDouble 进行汇总
  1.         private Double getDenominator(String cbdy, List<PcrclHVO> rclListFilter, Map<String, JcsjswbomHVO> swbom,
  2.                         Map<String, UFDouble> swbomMaxDays, List<String> rclsxzList, Map<String, YwdjcbhsfpxsBVO> fpxs,
  3.                         Map<String, UFDouble> numeratorMap) {
  4.                
  5.                 return rclListFilter.stream().mapToDouble(
  6.                                 e -> getNumerator(cbdy, e, getSwbom(e, swbom, swbomMaxDays, rclsxzList), getFpxs(e, fpxs), numeratorMap)
  7.                                                 .doubleValue())
  8.                                 .sum();
  9.         }
复制代码
回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2023-8-25 11:26:54 | 显示全部楼层
  1.                         UFDouble nmoney = new UFDouble(entry.getValue().stream().mapToDouble(e -> e.getFtje().doubleValue()).sum())
  2.                                         .multiply(multiplier);
复制代码
回复 点赞 拍砖

使用道具 举报

发表于 2023-8-25 14:35:24 | 显示全部楼层
回复 点赞 拍砖

使用道具 举报

发表于 2023-8-28 08:57:47 | 显示全部楼层
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-4-29 17:27 , Processed in 0.037951 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表