collection.stream用法

stream流集几乎可以完成对集合的任意操作,映射、去重、分组、排序、过滤等

1.元素转换(映射) map

例1:
List<SalesOrderProduct> salesOrderProductList;
List<ProductItemReq> items = salesOrderProductList().stream().map(p -> {ProductItemReq itemReq = new ProductItemReq();itemReq.setProductItemId(p.getProductItemId());itemReq.setQuantity(p.getQuantity().intValue());itemReq.setVariantId(p.getVariantId());return itemReq;}).collect(Collectors.toList());例2:
List<AbstractDomain> forUpdateList;
List<Integer> collect = forUpdateList.stream().map(AbstractDomain::getId).collect(Collectors.toList());
或者List<Integer> collect1 = forUpdateList.stream().map(d -> d.getId()).collect(Collectors.toList());

2.去重 distinct

        List<String> ids = products.stream().map(p -> p.getBusinessId()).distinct().collect(Collectors.toList());//多个商家需要拆单if (ids.size() == 1) {return ids.get(0);}

3. 数组分组 groupby

List<OrderSplitItemReq> paramSplitItems = new ArrayList<>();
Map<String, List<OrderSplitItemReq>> splitProductMap = paramSplitItems.stream().collect(Collectors.groupingBy(OrderSplitItemReq::getProductItemId));

4. stream中的元素转map Collectors.toMap

List<ProductVariantExt> productVariantExts = productVariantService.queryList(qryVariantDto);
Map<String, ProductVariantExt> variantMap = productVariantExts.stream().collect(Collectors.toMap(ProductVariantExt::getVariantId, Function.identity()));

5. 排序 sorted

List<CarOwnerRepurchantRights> sortedList = existsRights.stream().sorted(Comparator.comparing(CarOwnerRepurchantRights::getCreatedAt)).collect(Collectors.toList());

6.过滤 filter

//未配置业务线活动
List<String> tips = new ArrayList<>();
List<CouponActivityExtDto> withoutBusinessActivityList = activityList.stream().filter(x -> StringUtils.isEmpty(x.getBusinessCode())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(withoutBusinessActivityList)) {withoutBusinessActivityList.stream().forEach(x -> {tips.add(x.getCouponActivityId() + x.getTitle() + "成本方未配置");});
}

7.Function.identity()

Function.identity()返回一个输出跟输入一样的Lambda表达式对象,等价于形如t -> t形式的Lambda表达式

 Stream<String> stream = Stream.of("zhao", "qian", "sun", "li");Map<String, Integer> map = stream.collect(Collectors.toMap(Function.identity(), String::length));System.out.println(map);

输出: {qian=4, zhao=4, li=2, sun=3}
Function.identity() 即输入的love等字符串作为map的key, 字符串的长度作为map的值

8.map和flatMap的区别

两者都用于映射
map直接映射,flatMap整合映射
比如:

        // map函数单纯对元素进行映射List<String> list = new ArrayList<>();list.stream().map(str-> str+";").collect(Collectors.toList());// map函数将List<String>映射成 List<List>List<List> mapList = list.stream().map(str -> {List list1 = new ArrayList<String>();list1.add(str);return list1;}).collect(Collectors.toList());// flatMap元素映射整合过程List<String> -> List<List> -> List<String>// flatMap将 List的流 整合成 StringList<String> flatMapList = list.stream().flatMap(item -> {List<String> list2 = new ArrayList<>();list2.add(item);return list2.stream();}).collect(Collectors.toList());

collection.stream用法相关推荐

  1. Java8 Stream用法总结

    Java8 Stream Stream 总览 什么是流 流的构成 流的构造与转换 构造流的几种常见方法 流转换为其它数据结构 中间操作符 map mapToInt mapToLong.mapToDou ...

  2. mybatis联表查询的几种方式,association和collection的用法

    mybatis的association以及collection的用法 前言: 一.association 的三种用法: 第一种用法:association中使用select 第二种方法,嵌套 resu ...

  3. php clear(),PHP Ds\Collection clear()用法及代码示例

    Ds \ Collection::clear()函数是PHP中的内置函数,用于从集合中删除所有值. 用法: Ds\Collection::clear( void ) 参数:该函数不接受任何参数. 返回 ...

  4. java8中的Stream用法详解

    项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 1.为什么java8中加入Stream ...

  5. mybatis的association以及collection的用法

    在项目中,某些实体类之间肯定有关键关系,比如一对一,一对多等.mybatis 中就用association和collection. association: 一对一关联(has one) collec ...

  6. Collection stream 应用实例

    近日频繁应用 Stream 的 Api,记录一下应用实例. 基础数据 实体类: @Data @Accessors(chain = true) public static class Person {p ...

  7. php中isempty函数,PHP Ds\Collection isEmpty()用法及代码示例

    Ds \ Collection::isEmpty()函数是PHP中的内置函数,用于返回collection是否为空. 用法: Ds\Collection::isEmpty ( void ):bool ...

  8. java8 lambda python_java8里面lambda的stream()用法讲解

    dk8引进来的lambda语法是新语法,里面融进了python和c#的部分语法,stream()函数是主要用于集合而言的,对于数组就没效果 生成流函数 把集合装成流,可以多次使用这个集合,但是不转换流 ...

  9. java8 stream index_Java8的stream用法整理

    /***@authorindex * @date 2020/10/27 **/ public classTestcollectingAndThen { @Testpublic voidtest(){f ...

最新文章

  1. 重温ES6核心概念和基本用法
  2. Markdown 中画图
  3. 2016.5.27 科学————量子力学初识
  4. 不忘本~委托和事件(续)
  5. ListBox类似组件,鼠标右键点击事件得到选中Item
  6. camel apache_Apache Camel 3只有2个月的路程
  7. Android零基础入门第83节:Activity间数据传递方法汇总
  8. python语法笔记(四)
  9. oracle 01589,ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
  10. 13 计算机组成原理第七章 输入/输出系统 I/O方式 I/O接口
  11. itext实现HTML转换为PDF
  12. Visual Studio Code
  13. NPOI 导出Excel 数据方式
  14. maven构建Hibernate项目
  15. 记2014“蓝桥杯全国软件大赛quot;决赛北京之行
  16. 二维数组冒泡排序 java
  17. 同事说关键字查询用Mysql,我上去就是一个高压锅,用ElasticSearch不香吗?
  18. python调用pyd_使用python pyd时出错
  19. 黑苹果鼠标不动_MacOS系统:解决黑果睡眠唤醒后假死问题(如键盘鼠标无反应等)...
  20. 编写高效 TS 代码的一些建议

热门文章

  1. JeecgBoot 低代码开发平台 3.5.3 版本发布,Online 功能专题升级
  2. 2021.06.02税收和补贴问题
  3. 剪贴板增强工具Ditto
  4. linux 内核 修改mss,Linux下TCP-MSS 修改,实验以及测试(详细)
  5. 机器人钩阿木木_英雄联盟:机器人最不敢钩的英雄,石头算一个,钩中他坐等团灭!...
  6. printf格式化字符串漏洞原理解析
  7. DevExpress v21.1正式版上线——WinForm篇
  8. 用Mysql写一个图书管理系统并且可视化
  9. 谷歌最新AI产品——AutoML Vision,可以自动设计机器学习模型
  10. 华为三层交换机实现不同vlan间通信