Java 基础(Stream APl) 二

Stream的终止操作

终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如: List、Integer、甚至是 void。

流进行了终止操作后,不能再次使用。

方法 描述 allMatch(Predicate p) 检查是否匹配所有元素 anyMatch(Predicate p) 检查是否至少匹配一个元素 noneMatch(Predicate p) 检查是否没有匹配所有元素 findFirst() 返回第一个元素 findAny() 返回当前流中的任意元素

StreamAPITest2.java

package com.klvchen.java3;

import com.klvchen.java2.Employee;
import com.klvchen.java2.EmployeeData;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamAPITest2 {

    //1-匹配与查询
    @Test
    public void test1(){
        List<employee> employees = EmployeeData.getEmployees();

        // allMatch(Predicate p) &#x2014; &#x68C0;&#x67E5;&#x662F;&#x5426;&#x5339;&#x914D;&#x6240;&#x6709;&#x5143;&#x7D20;&#x3002;
        // &#x7EC3;&#x4E60;:&#x662F;&#x5426;&#x6240;&#x6709;&#x7684;&#x5458;&#x5DE5;&#x7684;&#x5E74;&#x9F84;&#x90FD;&#x5927;&#x4E8E;18
        boolean allMatch = employees.stream().allMatch(e -> e.getAge() > 18);
        System.out.println(allMatch);

        // anyMatch(Predicate p) &#x2014; &#x68C0;&#x67E5;&#x662F;&#x5426;&#x81F3;&#x5C11;&#x5339;&#x914D;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x3002;
        // &#x7EC3;&#x4E60;:&#x662F;&#x5426;&#x5B58;&#x5728;&#x5458;&#x5DE5;&#x7684;&#x5DE5;&#x8D44;&#x5927;&#x4E8E;10000
        boolean anyMatch = employees.stream().anyMatch(e -> e.getSalary() > 10000);
        System.out.println(anyMatch);

        // noneMatch(Predicate p) &#x2014; &#x68C0;&#x67E5;&#x662F;&#x5426;&#x6CA1;&#x6709;&#x5339;&#x914D;&#x7684;&#x5143;&#x7D20;&#x3002;
        // &#x7EC3;&#x4E60;:&#x662F;&#x5426;&#x5B58;&#x5728;&#x5458;&#x5DE5;&#x59D3;&#x201C;&#x96F7;&#x201D;
        boolean noneMatch = employees.stream().noneMatch(e -> e.getName().startsWith("&#x96F7;"));
        System.out.println(noneMatch);

        //findFirst &#x2014; &#x8FD4;&#x56DE;&#x7B2C;&#x4E00;&#x4E2A;&#x5143;&#x7D20;
        Optional<employee> employee = employees.stream().findFirst();
        System.out.println(employee);

        //findAny &#x2014; &#x8FD4;&#x56DE;&#x5F53;&#x524D;&#x6D41;&#x4E2D;&#x7684;&#x4EFB;&#x610F;&#x5143;&#x7D20;
        Optional<employee> employee1 = employees.parallelStream().findAny();
        System.out.println(employee1);
    }

    @Test
    public void test2(){
        List<employee> employees = EmployeeData.getEmployees();
        // count &#x2014;&#x2014; &#x8FD4;&#x56DE;&#x6D41;&#x4E2D;&#x5143;&#x7D20;&#x7684;&#x603B;&#x4E2A;&#x6570;
        long count = employees.stream().filter(e -> e.getSalary() > 5000).count();
        System.out.println(count);

        // max(Comparator c) &#x2014; &#x8FD4;&#x56DE;&#x6D41;&#x4E2D;&#x6700;&#x5927;&#x503C;
        // &#x7EC3;&#x4E60;:&#x8FD4;&#x56DE;&#x6700;&#x9AD8;&#x7684;&#x5DE5;&#x8D44;:
        Stream<double> salaryStream = employees.stream().map(e -> e.getSalary());
        Optional<double> maxSalary = salaryStream.max(Double::compare);
        System.out.println(maxSalary);

        // min(comparator c)&#x2014;&#x8FD4;&#x56DE;&#x6D41;&#x4E2D;&#x6700;&#x5C0F;&#x503C;
        // &#x7EC3;&#x4E60;:&#x8FD4;&#x56DE;&#x6700;&#x4F4E;&#x5DE5;&#x8D44;&#x7684;&#x5458;&#x5DE5;
        Optional<employee> employee = employees.stream().min((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));
        System.out.println(employee);
        System.out.println();

        // forEach(consumer c) &#x2014; &#x5185;&#x90E8;&#x8FED;&#x4EE3;
        employees.stream().forEach(System.out::println);

        System.out.println();

        // &#x4F7F;&#x7528;&#x96C6;&#x5408;&#x7684;&#x904D;&#x5386;&#x64CD;&#x4F5C;
        employees.forEach(System.out::println);
    }

    //2-&#x5F52;&#x7EA6;
    @Test
    public void test3(){
        // reduce(T identity, BinaryOperator) &#x2014; &#x53EF;&#x4EE5;&#x5C06;&#x6D41;&#x4E2D;&#x5143;&#x7D20;&#x53CD;&#x590D;&#x7ED3;&#x5408;&#x8D77;&#x6765;&#xFF0C;&#x5F97;&#x5230;&#x4E00;&#x4E2A;&#x503C;&#x3002;&#x8FD4;&#x56DE;
        // &#x7EC3;1:&#x8BA1;&#x7B97;1-10&#x7684;&#x81EA;&#x7136;&#x6570;&#x7684;&#x548C;
        List<integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Integer sum = list.stream().reduce(0, Integer::sum);
        System.out.println(sum);

        // reduce(Binary0perator) &#x4E00; &#x53EF;&#x4EE5;&#x5C06;&#x6D41;&#x4E2D;&#x5143;&#x7D20;&#x53CD;&#x590D;&#x7ED3;&#x5408;&#x8D77;&#x6765;&#xFF0C;&#x5F97;&#x5230;&#x4E00;&#x4E2A;&#x503C;&#x3002;&#x8FD4;&#x56DE;Optional
        // &#x7EC3;&#x4E60;2:&#x8BA1;&#x7B97;&#x516C;&#x53F8;&#x6240;&#x6709;&#x5458;&#x5DE5;&#x5DE5;&#x8D44;&#x7684;&#x603B;&#x548C;
        List<employee> employees = EmployeeData.getEmployees();
        Stream<double> salaryStream = employees.stream().map(Employee::getSalary);
        //Optional<double> sumMoney = salaryStream.reduce(Double::sum);
        Optional<double> sumMoney = salaryStream.reduce((d1, d2) -> d1 + d2);
        System.out.println(sumMoney);

    }

    //3-&#x6536;&#x96C6;
    @Test
    public void test4(){
        // collect(collector c) &#x2014; &#x5C06;&#x6D41;&#x8F6C;&#x6362;&#x4E3A;&#x5176;&#x4ED6;&#x5F62;&#x5F0F;&#x3002;&#x63A5;&#x6536;&#x4E00;&#x4E2A; Collector &#x63A5;&#x53E3;&#x7684;&#x5B9E;&#x73B0;&#xFF0C;&#x7528;&#x4E8E;&#x7ED9;Stream
        // &#x7EC3;&#x4E60;1:&#x67E5;&#x627E;&#x5DE5;&#x8D44;&#x5927;&#x4E8E;6000&#x7684;&#x5458;&#x5DE5;&#xFF0C;&#x7ED3;&#x679C;&#x8FD4;&#x56DE;&#x4E3A;&#x4E00;&#x4E2A; List &#x6216; Set
        List<employee> employees = EmployeeData.getEmployees();
        List<employee> employeeList = employees.stream().filter( e -> e.getSalary() > 6000).collect(Collectors.toList());

        employeeList.forEach(System.out::println);
        System.out.println();

        Set<employee> employeeSet = employees.stream().filter(e -> e.getSalary() > 6000).collect(Collectors.toSet());
        employeeSet.forEach(System.out::println);
    }
}
</employee></employee></employee></double></double></double></employee></integer></employee></double></double></employee></employee></employee></employee>

Original: https://www.cnblogs.com/klvchen/p/15733139.html
Author: klvchen
Title: Java 基础(Stream APl) 二

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537535/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Kafka消费消息丢失排查,原因竟是groupId重复

    现象 BI的同事发现某指标数据展示有问题,发现最近入库的数据缺失,然后反馈到DBA. 经DBA排查后发现原始数据缺少. 排查 之前笔者在休假,同事初步排查怀疑是消息阻塞导致.经过代…

    Java 2023年6月9日
    070
  • 30个类手写Spring核心原理之动态数据源切换(8)

    本文节选自《Spring 5核心原理》 阅读本文之前,请先阅读以下内容: 30个类手写Spring核心原理之自定义ORM(上)(6) 30个类手写Spring核心原理之自定义ORM…

    Java 2023年6月7日
    091
  • 死锁详解

    死锁的定义 所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,每个进程持有某种资源而又都等待着别的进程释放它或它们现在保持着的资源,当进程处于这种僵持状态时,若无外力作…

    Java 2023年6月15日
    086
  • c 的陷阱

    c语言算是非常古老了,像瑞士军刀灵活却也很容易伤到自己,即使是多年的老杆子,以致于市面上都有一本经典的C的书叫《C陷阱与缺陷》的书。 这个文章总结下c中常见的陷阱,可能在日常工作或…

    Java 2023年5月29日
    079
  • 如果程序员没了手!

    前些天手摔伤了,一直养着,这段时间最大的体会是:没有手真麻烦,没有右手真痛苦。 只能左手上啦 正好赶上最近事情也多,一些事务性的工作啦等等,总是在不停地求助,住院期间就不说了,幸好…

    Java 2023年5月30日
    091
  • Maven——settings.xml配置

    settings.xml配置 该settings.xml位于maven文件夹中的conf文件夹下 略过第一段注释(全是废话),看第二段注释 如第二段注释所说,配置有2处:用户配置和…

    Java 2023年6月5日
    099
  • 标识符命名、instanceof 、自动装箱与拆箱、java关键字

    标识符的命名规则 标识符的含义: 是指在程序中,我们自己定义的内容,譬如, 类的名字, 方法名称以及 变量名称等等,都是标识符。 命名规则:(硬性要求) 标识符可以包含英文字母,0…

    Java 2023年6月13日
    072
  • 线程池面试必考

    你对Java线程池了解吗?你有用过线程池吗?那先说下线程池核心参数吧。。。对不起,我回去再看看吧。 为了一丝体面,我们今天来整理几个面试中常考线程池面试问题吧! 为什么要用线程池?…

    Java 2023年6月8日
    059
  • 230_RabbitMQ-高级-分布式事务

    简述 分布式事务的方式 两阶段提交(2PC)需要数据库厂商的支持,java组件有atomikos等。 + 存在的问题 补偿事务(TCC) 严选,阿里,蚂蚁金服。 本地消息表(异步确…

    Java 2023年6月7日
    065
  • 《隐入尘烟》-我眼中的年度最佳

    《隐入尘烟》无疑是一部不可多得的佳作。然而,正是这样的佳作,票房却比不上那些烂俗的电影,那些烂俗甚至空洞的电影票房动辄上亿甚至几十亿,却是最有市场的最叫座的。 故事发生在西北的一个…

    Java 2023年6月13日
    070
  • ant-design-vue中table自定义列

    1. 使用背景 在项目中使用 ant-vue的 a-table控件过程中,需要显示序号列或者在列中显示图片,超链,按钮等UI信息。经过查询文档 customCell和 custom…

    Java 2023年6月13日
    077
  • 两个世界

    初次接触编程的时候,我用C++写了一个程序,向控制台输出Hello World。一时之间兴奋不已,觉得好生神奇。于是,编程的世界打开了,再也关不住。现在,让我们也以这样一个Hell…

    Java 2023年6月5日
    060
  • 2>&1到底是什么意思?

    java -jar snapshot.jar > snapshot.log 2>&1 & 写Java的朋友一定对上面的命令很熟悉,相信大部分人都知道 &…

    Java 2023年6月7日
    067
  • .net ElasticSearch-Sql 扩展类【原创】

    官方提供的是java sdk,并支持jdbc方式的查询结果输出;但是却没有.net sdk的支持。 开发 ElasticSearch-Sql 第三方开源项目的.net sdk,未来…

    Java 2023年6月8日
    069
  • HTTP和Servlet快速入门

    依赖:创建web项目,导入Servlet依赖坐标 Tomcat内置Servlet,若运行时使用该依赖则会导致冲突使用 <scope>provided</scope…

    Java 2023年6月13日
    085
  • 彻底掌握Makefile(二)

    彻底掌握Makefile(二) 前言 在前面的文章彻底掌握Makefile(一)当中,我们简要的介绍了一些常见的makefile使用方法,在本篇文章当中我们将继续介绍一些makef…

    Java 2023年6月8日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球