2. Java8 Stream API 概述

本文详细介绍了Java 8中的Stream API,包括Stream的基本操作步骤、如何创建Stream、中间操作及终止操作。通过示例讲解了查找与匹配、归约等操作的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本操作步骤

  1. 创建Stream
  2. 中间操作
  3. 终止操作

1.创建Stream

  1. Collection提供了两个方法
  • stream()
    获取一个顺序流
Stream<String> stream = list.stream();
  • parallelStream()
    获取一个并行流
Stream<String> parallelStream = list.parallelStream();

并行流 : 就是把一个内容分成多个数据块,并用不同的线程分 别处理每个数据块的流

  1. 通过Arrays 中的 stream() 获取一个数组流
        Integer[] nums = new Integer[10];
        Stream<Integer> stream1 = Arrays.stream(nums);

3.通过Stream中静态方法of()创建

Stream<Integer> stream2 = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
  1. 创建无限流
  • 迭代方式
        Stream<Integer> stream3 = Stream.iterate(0, x -> x + 3);
        stream3.forEach(System.out::println);
  • 生成方式
        Stream<Double> stream4 = Stream.generate(Math::random);
        stream4.forEach(System.out::println);

2.中间操作

请看下一节:3. Java8 Stream 操作

3. 终止操作

1. 查找与匹配

方法描述
allMatch检查是否匹配所有元素
anyMatch检查是否至少匹配一个元素
noneMatch检查是否没有匹配的元素
findFirst返回第一个元素
findAny返回当前流中的任意元素
count返回流中元素的总个数
max返回流中最大值
min返回流中最小值
  • 例子
        //筛选
        //allMatch——检查是否匹配所有元素
        boolean match = emps.stream().allMatch(e -> e.getStatus().equals(Employee.Status.BUSY));
        //anyMatch——检查是否至少匹配一个元素
        boolean match1 = emps.stream().anyMatch(e -> e.getStatus().equals(Employee.Status.FREE));
        //noneMatch——检查是否没有匹配的元素
        boolean match3 = emps.stream().noneMatch(e -> e.getStatus().equals(Employee.Status.BUSY));
        //findFirst——返回第一个元素
        Optional<Employee> first = emps.stream().findFirst();
        Employee employee = first.get();
        //findAny——返回当前流中的任意元素
        Optional<Employee> any = emps.stream().findAny();
        Employee employee1 = any.get();
        //count——返回流中元素的总个数
        long count = emps.stream().count();
        //max——返回流中最大值
        Optional<Integer> max = emps.stream().map(Employee::getAge).max(Integer::compare);
        Integer integer = max.get();
        //min——返回流中最小值
        emps.stream().map(Employee::getId).min(Integer::compare);

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

2. 归约

方法描述
reduce(T iden, BinaryOperator b)可以将流中元素反复结合起来,得到一个值。返回T
reduce(BinaryOperator b)可以将流中元素反复结合起来,得到一个值。返回Optional<T>
        Optional<Integer> reduce = numList.stream().reduce((x, y) -> x + y);
        int s = reduce.get();
        System.out.println(s);

        Optional<Integer> reduce1 = emps.stream().map(Employee::getAge).reduce(Integer::max);
        System.out.println(reduce1.get());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值