预设场景:

从Mybatis调用Mapper得到的用户集合

List<UserDTO> userList = new ArrayList<>();

常用的几种API用法示例:

Map方法,转换为某一个字段的集合:

List<Integer> userIdList = userList.stream()
/* map 转换成某个类型来处理,比如这个场景是为了快速提取用户id */
.map(UserDTO::getId)
.collect(Collectors.toList());

Distinct方法,对基本类型支持去重处理:

 List<Integer> distinctUserIds = userIdList.stream()
/* distinct 可对元素进行去重,推荐类型是基础包装类和String两种 */
.distinct()
.collect(Collectors.toList());

 

FlatMap方法,支持更深维度的处理:

List<String> fun1 = Arrays.asList("one", "two", "three");
List<String> fun2 = Arrays.asList("four", "five", "six");
List<List<String>> nestedList = Arrays.asList(fun1, fun2);
nestedList.stream()
/* flatMap 可以支持更深维度的集合转换,stream合并处理 */
.flatMap(x -> x.stream()).map(x->x.toUpperCase())
.forEach(System.out::println);

 

Filter方法,根据条件对集合进行过滤处理

检查名称是否包含张字的用户

List<UserDTO> matchUsers = userList.stream()
/* filter 用于检索匹配条件方法的元素 */
.filter(user -> user.getUserName().contains("张"))
/* 存在多个情况可以使用 toList 收集匹配的元素 */
.collect(Collectors.toList());

  

FindFirst和FindAny方法,筛选为单个

UserDTO userDTO = matchUsers.stream()
.filter(user -> "1001".equals(user.getId().toString()))
/* 或者使用 findFirst && findAny 提取唯一一个元素 */
.findFirst()
.get();

  

AnyMatch与AllMatch 对集合进行匹配判断:

boolean anyMatch = userList.stream()
/* anyMatch 检查任意元素是否符合匹配方法,反之 allMatch 要求所有元素符合 */
.anyMatch(user -> 3001 > user.getId());

  

GroupBy 等同SQL的GroupBy,但是只能是单个字段的

Map<String, List<UserDTO>> userGroupMap = userList.stream()
/* groupingBy 指定以什么值作为分组的条件,这里以用户的组名称进行分组 */
.collect(Collectors.groupingBy(UserDTO::getGroupName));

  

PartitionBy 则根据你的自定义的方法具体分组,但是只有true和false两种:

 final Integer superPermit = 1001;
Map<Boolean, List<UserDTO>> permitPartMap = userList.stream()
/* partitioningBy 使用条件进行分区处理,场景:检查是不是超级权限的用户, 分区为 超级权限用户(true)和非超级权限用户(false) */
.collect(Collectors.partitioningBy(user -> user.getRoleIds().contains(superPermit)));

Skip与Limit 对集合支持翻页操作:

/* 用于集合的翻页操作, 等同SQL的LIMIT 10, 20 */
List<UserDTO> collect = userList.stream()
.skip(10).limit(20)
.collect(Collectors.toList());

  

Reduce 对集合进行聚合操作:

/* reduce用于聚合处理,例如合计这个用户集合的现金 */
BigDecimal userCashAmount = userList.stream()
.map(UserDTO::getAmount)
.reduce(new BigDecimal(0), BigDecimal::add);

  

  

【Java】讲讲StreamAPI的更多相关文章

  1. java讲讲几种常见的排序算法(二)

    java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点( ...

  2. java讲讲几种常见的排序算法

    java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...

  3. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  4. 从Tomcat无法正常关闭讲讲Java线程关闭问题【转载】

    正常情况下,会优先采用catalina.sh stop来停止Tomcat实例,这样可以让服务有机会处理完请求,并做好善后工作. 但如果通过catalina.sh stop命令无法关闭Tomcat实例, ...

  5. 每日一问:讲讲 Java 虚拟机的垃圾回收

    昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...

  6. java中讲讲PrintWriter的用法,举例?

    [学习笔记] 1.2 PrintWriter的用法 PrintWriter和PrintStream类似,只不过PrintStream是针对字节流的,而PrintWriter是针对字符流的. 例:1.2 ...

  7. java中讲讲DataInputStream的用法,举例?

    [学习笔记] 2.4 DataInputStream的用法 马 克-to-win:DataInputStream顾名思义:就是专门用来读各种各样的数据的,比如(int,char,long等),一定要注 ...

  8. java中讲讲PrintStream的用法,举例?

    [学习笔记] 1.2 PrintStream的用法   从学java第一天,我们就经常用到System.out.println(),实际上查阅文档可知,System.out就是Sun 编的一个Prin ...

  9. 讲讲java中线程池的实现

    今天跟一个同学谈到java中的线程池的实现,才发现有些知识点已经记不清了,所以特意把源码打开,对官方文档做了些说明. 其实这些理解了之后,读懂源码应该是没多大问题了,有感兴趣的小伙伴们可以看完说明后自 ...

  10. 今儿直白的用盖房子为例,给你讲讲Java建造者模式

    摘要:建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 本 ...

随机推荐

  1. MySQL学习笔记-约束

    约束 约束是作用于表中字段上的规则,用于限制存储在表中的数据,保证数据库中数据的正确.有效和完整. 一. 常用的约束 约束作用于表中的字段,可以在创建表或修改表的时候添加约束. AUTO_INCREM ...

  2. uniapp 富文本图片100%显示

    下面的这个方法是在百度上找的,但是老是报错,一直没找到原因,索性自己就挨个检查了下,发现在过滤之前需要对传过来的值进行检测,是字符串才能让这个方法执行 filters: { formatRichTex ...

  3. Redisson 限流器源码分析

    Redisson 限流器源码分析 对上篇文章网友评论给出问题进行解答:redis 的key 是否会过期 可以先阅读上篇文章: redis + AOP + 自定义注解实现接口限流 - 古渡蓝按 - 博客 ...

  4. 2023 Hive 面试宝典

    先说一些废话 总结一下Hive面试宝典,方便读者快速过一遍Hive面试所需要的知识点 Hive的介绍 Hive和Hadoop的关系 Hive利用hdfs存储数据,利用MapReduce查询数据 Hiv ...

  5. 如何简单实现suno-api账号保活

    本文由 ChatMoney团队出品 简介 之前的一个简易的项目suno-api.是使用cookie来获取suno-token发起请求的,之前写的简单,并没有做cookie保活,在运行一段时间后cook ...

  6. Python 潮流周刊#54:ChatTTS 强大的文本生成语音模型

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  7. ETL工具-nifi干货系列 第九讲 处理器EvaluateJsonPath,根据JsonPath提取字段

    1.其实这一节课本来按照计划一起学习RouteOnAttribute处理器(相当于java中的ifelse,switch case 控制语句),但是在学习的过程中遇到了一些问题.RouteOnAttr ...

  8. nfs笔记整理

    NFS---共享存储系统 #network file system 网络文件系统 ​ #NFS主要使用在局域网下,让不同的主机之间可以共享文件.或者目录数据.主要用于linux系统上实现文件共享的一种 ...

  9. NetCore Benchmark 基准测试

    基于NetCore的基准测试Demo(控制台程序) 创建控制台程序,输入工程名称    LinqConsole 通过NuGet引用BenchmarkDotNet至工程中 编写测试代码  类:Bench ...

  10. 在线XML格式化工具

    在线XML格式化工具可以帮助您轻松格式化混乱的XML代码.只需将您的XML代码复制并粘贴到文本框中,工具会自动对代码进行缩进.对齐和添加空格等操作,使代码看起来更加整洁和专业. 在线XML格式化工具