预设场景:

从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. 震惊!docker镜像还有这些知识你都知道吗

    震惊!docker镜像还有这些知识你都知道吗? 镜像搜索 语法 [root@hmm docker-hello]# docker search -h Flag shorthand -h has been ...

  2. 程序员面试金典-面试题 02.02. 返回倒数第 k 个节点

    题目: 实现一种算法,找出单向链表中倒数第 k 个节点.返回该节点的值. 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 k = 2输出: 4说明: ...

  3. CSPJ赛前刷题

    T1 \(\color{red}\text{正难则反}\),最短路 T2 图论(糅杂着一点DP) T3 DP 优化:减去不需要的状态 T4 一定要写注释!!! 不开longlong见祖宗!!! T5 ...

  4. MySQL条件判断IF,CASE,IFNULL语句详解

    MySQL条件判断IF,CASE,IFNULL语句详解 1.IF语句的基本用法IF(condition, true_statement, false_statement);condition: 条件表 ...

  5. mysql8新版本安装注意事项及解决本地系统账户Strart the server和SQLyog客户端连接报 plugin caching_sha2_password could not be loaded

    mysql 安装包一路next安装, 到Apply Configuration,卡住在Start the server,原因是mysql8新版本的登录身份不对,需要进入服务,找到mysql80,然后属 ...

  6. hibernate映射对照表

    2.3. Basic Types Basic value types usually map a single database column, to a single, non-aggregated ...

  7. 制作tomcat镜像

    本篇文章介绍用Dockerfile的方式构建Tomcat镜像,请保证安装了Docker环境. 首先创建/opt/tomcat目录,后续步骤都在该目录下进行操作. 准备好Jdk和Tomcat安装文件,放 ...

  8. 【仿真】Carla简易安装 Window Ubuntu均适用 附ROS的简单连接 [0]

    参考与前言 CARLA Documentation 官方文档 后续链接:[仿真]Carla介绍与使用 [1] 本篇创建于 2020/12/18,安装方式为压缩包安装,无需UE4等软件,但是前提是需要一 ...

  9. 【创龙全国产T3核心板】赋能工业领域新发展

    在工业5.0时代浪潮持续推进并具备确定性的时代背景下,工业领域创新升级的需求日益增长,为满足各种工业环境下的应用需求,面向工业领域,创龙科技推出了基于全志T3处理器的元器件全国产化工业级核心板--SO ...

  10. 【ClickHouse】4:clickhouse基本操作二 建库建表导数据

    背景介绍: 有三台CentOS7服务器安装了ClickHouse HostName IP 安装程序 程序端口 centf8118.sharding1.db 192.168.81.18 clickhou ...