首页 > 编程语言 >【Java】讲讲StreamAPI

【Java】讲讲StreamAPI

时间:2023-06-27 23:14:18浏览次数:40  
标签:Collectors Java 讲讲 stream collect List userList user StreamAPI

 

预设场景:

从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);

  

 

  

 

标签:Collectors,Java,讲讲,stream,collect,List,userList,user,StreamAPI
From: https://www.cnblogs.com/mindzone/p/17510138.html

相关文章

  • JavaBlog-3
    前言第三次也是最后博客文章主要是关于java课程第三阶段关于PTA题目集、超星作业以及在实验平台上布置的一些题型。相较于第一、二阶段的作业总结而言此次作业更加针对于总结在面向对象过程中的三大技术特性,即封装性、继承性和多态性,类图的设计更加普遍。在不断深入学习Java......
  • JavaScript 中模块的导入和导出
    模块简介html文档一般在标签中引入外部js文件<script>标签引入的脚本中创建的变量,都会被注册为window对象下全局变量,这样做会污染全局命名空间这就衍生除了模块化的解决方案,比如CommonJS等,但是这些解决方案都不是JavaScript原生的,直到ES6支持JavaScript模块的使用。......
  • Java学习——IDEA编辑器 导出项目对应Java Doc文件
    IDEA生成JavaDoc帮助文档方法一:使用命令行生成1.选中项目右键showinExplor。。2.选中地址栏cmd3.输入命令javadoc-encodingUTF-8-charsetUTF-8Doc.java4.在项目地址中查看生成html等文件方法二:使用idea生成1.(选中要生成文档的类)找到工具栏tools-->......
  • Java学习3——第七至十 一次题目集以及第三阶段学习的分析与总结
    一.前言   本次Blog是对java学习中第三阶段的一个总结,作为刚学习JAVA不久的小白,以下依旧只是本人作为普通学生,以当前能力和状态所做出的总结和分析,不足之处也欢迎各位大佬的指正! 第七至第十一次题目集,总体题量都比较少,其中较多的也就5道题,其它的就1道。总体难度较第四-六......
  • Java ssh 访问windows/Linux
    工作中遇到的问题:Javacode运行在一台机器上,需要远程到linux的机器同时执行多种命令。原来采用的方法是直接调用ssh命令或者调用plink的命令。google下java的其他ssh方法,发现有个包。具体介绍如下:GanymedSSH2forJavaisalibrarywhichimplementstheSSH-2protocolinpure......
  • Java中WebService实例
    WebServices是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。WebService的关键技术和规则:1.XML:描述数据的标准方法.2.SOAP:表示信息交换的协议(简单对象访问协议).3.WSDL:Web服务描述语言.4.UDDI:通用描述、发现与集......
  • Java并发(十二)----线程应用之多线程解决烧水泡茶问题
    1、背景统筹方法,是一种安排工作进程的数学方法。它的实用范围极广泛,在企业管理和基本建设中,以及关系复杂的科研项目的组织与管理中,都可以应用。怎样应用呢?主要是把工序安排好。比如,想泡壶茶喝。当时的情况是:开水没有;水壶要洗,茶壶、茶杯要洗;火已生了,茶叶也有了。怎么办?办法甲......
  • 阿里的Java开发规范插件验证
    阿里最近有点“烦”,但是作为技术人,更多关注的还是技术层面,其他的就交给有关机构和时间来证明。最近有项工作借鉴了阿里的Java开发规范,为了能让其落地,需要验证方案,而这个Java开发规范提供了对应的验证插件,因此从使用层面,了解一下。目前该插件实现了开发手册中的的53条规则,大部分基于......
  • 对第三阶段PTA集训及Java课程的分析与反思
    前言:本阶段PTA集训共有8-11题目集,涵盖了很多知识点,尤其是成绩计算系列题目,几乎包含了Java目前所学的所有内容,写下来非常不容易(可能对于我这种小菜鸡来说很难)。涵盖的知识点包括对Stirng类型的处理,对象数组的创建与处理,抽象类的使用,异常的处理,逻辑的训练,设计模式的实操。题量不大......
  • java-集合类学习
    LinkedHashMapAspecialconstructorisprovidedtocreatealinkedhashmapwhoseorderofiterationistheorderinwhichitsentrieswerelastaccessed,fromleast-recentlyaccessedtomost-recently(access-order).Thiskindofmapiswell-suitedtobu......