Java--Stream 的终止操作

1: 匹配和查找

   /**
     * 匹配和查找
     */
    @Test
    public void test1() {
        List<Employee> employeeList = new ArrayList<>();
        employeeList.add(new Employee(1, "张三", 18, 9999.99));
        employeeList.add(new Employee(2, "李四", 59, 6666.66));
        employeeList.add(new Employee(3, "王五", 28, 3333.33));
        employeeList.add(new Employee(4, "赵六", 8, 7777.77));
        employeeList.add(new Employee(5, "田七", 38, 5555.55));
        employeeList.add(new Employee(6, "马云", 35, 9876.23));
        employeeList.add(new Employee(7, "比尔盖茨", 67, 5637.78));
        employeeList.add(new Employee(8, "乔布斯", 59, 9387.33));
        employeeList.add(new Employee(9, "扎克伯格", 35, 6786.23));

        //1:是否所有员工年龄都大于18
        boolean allAge = employeeList.stream().allMatch(e -> e.getAge() > 18);
        System.out.println(allAge);

        System.out.println("------------------------------");

        //2:是否存在员工工资大于9000
        boolean anyAge = employeeList.stream().anyMatch(e -> e.getSalary() > 9000);
        System.out.println(anyAge);

        System.out.println("------------------------------");

        //3: 是否存在姓“王”的员工,noneMatch()检查是否没有匹配到的元素,存在则返回false,否则返回true
        boolean exist = employeeList.stream().noneMatch(e -> e.getName().startsWith("王"));
        System.out.println(exist);

        System.out.println("------------------------------");

        //4: 查找第一个员工
        Optional<Employee> first1 = employeeList.stream().findFirst();
        Employee first = first1.get();
        System.out.println(first);

        System.out.println("------------------------------");

        //5: 返回任意一个员工
        //串行流
        //Optional<Employee> any = employeeList.stream().findAny();
        //并行流
        Optional<Employee> any = employeeList.parallelStream().findAny();
        System.out.println(any.get());

        System.out.println("------------------------------");

        //6:获取员工的个数
        long count = employeeList.stream().count();
        System.out.println(count);

        System.out.println("------------------------------");

        //7:获取工资大于6000的员工个数
        long count1 = employeeList.stream().filter(e -> e.getSalary() > 6000).count();
        System.out.println(count1);

        System.out.println("------------------------------");

        //8:获取工资最高的员工
        //Optional<Employee> max = employeeList.stream().max((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));
        Optional<Employee> max = employeeList.stream().max(Comparator.comparingDouble(Employee::getSalary));
        System.out.println(max.get());

        System.out.println("------------------------------");

        //9:获取工资最低的员工
        //Optional<Employee> min = employeeList.stream().max((e1, e2) -> -Double.compare(e1.getSalary(), e2.getSalary()));
        Optional<Employee> min = employeeList.stream().min(Comparator.comparingDouble(Employee::getSalary));
        System.out.println(min.get());

    }
运行结果: 
  false
  ------------------------------
  true
  ------------------------------
  false
  ------------------------------
  Employee{id=1, name='张三', age=18, salary=9999.99}
  ------------------------------
  Employee{id=6, name='马云', age=35, salary=9876.23}
  ------------------------------
  9
  ------------------------------
  6
  ------------------------------
  Employee{id=1, name='张三', age=18, salary=9999.99}
  ------------------------------
  Employee{id=3, name='王五', age=28, salary=3333.33}

2: 规约

   /**
     * 规约
     */
    @Test
    public void test2() {
        //1: 计算1到10自然数的和
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        //Integer sum = list.stream().reduce(0, (x, y) -> x + y);
        Integer sum = list.stream().reduce(0, Integer::sum);
        System.out.println(sum);

        System.out.println("------------------------------");

        List<Employee> employeeList = new ArrayList<>();
        employeeList.add(new Employee(1, "张三", 18, 9999.99));
        employeeList.add(new Employee(2, "李四", 59, 6666.66));
        employeeList.add(new Employee(3, "王五", 28, 3333.33));
        employeeList.add(new Employee(4, "赵六", 8, 7777.77));
        employeeList.add(new Employee(5, "田七", 38, 5555.55));
        employeeList.add(new Employee(6, "马云", 35, 9876.23));
        employeeList.add(new Employee(7, "比尔盖茨", 67, 5637.78));
        employeeList.add(new Employee(8, "乔布斯", 59, 9387.33));
        employeeList.add(new Employee(9, "扎克伯格", 35, 6786.23));
        //计算所有员工的工资总和
        Stream<Double> doubleStream = employeeList.stream().map(Employee::getSalary);
        Optional<Double> reduce = doubleStream.reduce(Double::sum);
        System.out.println(reduce.get());
        Stream<Double> doubleStream1 = employeeList.stream().map(Employee::getSalary);
        Optional<Double> reduce1 = doubleStream1.reduce((d1, d2) -> d1 + d2);
        System.out.println(reduce1.get());
    }

运行结果: 
  55
  ------------------------------
  65020.869999999995
  65020.869999999995

3: 收集

   /**
     * 收集
     *
     */
    @Test
    public void test3() {
        List<Employee> employeeList = new ArrayList<>();
        employeeList.add(new Employee(1, "张三", 18, 9999.99));
        employeeList.add(new Employee(2, "李四", 59, 6666.66));
        employeeList.add(new Employee(3, "王五", 28, 3333.33));
        employeeList.add(new Employee(4, "赵六", 8, 7777.77));
        employeeList.add(new Employee(5, "田七", 38, 5555.55));
        employeeList.add(new Employee(6, "马云", 35, 9876.23));
        employeeList.add(new Employee(7, "比尔盖茨", 67, 5637.78));
        employeeList.add(new Employee(8, "乔布斯", 59, 9387.33));
        employeeList.add(new Employee(9, "扎克伯格", 35, 6786.23));

        //查找工资大于6000的员工,返回一个集合
        //1:返回List集合
        List<Employee> collect = employeeList.stream().filter(e -> e.getSalary() > 6000).collect(Collectors.toList());
        collect.forEach(System.out::println);

        System.out.println("------------------------------");

        //2:返回Set集合
        Set<Employee> collect1 = employeeList.stream().filter(e -> e.getSalary() > 6000).collect(Collectors.toSet());
        collect1.forEach(System.out::println);
    }
运行结果:
  Employee{id=1, name='张三', age=18, salary=9999.99}
  Employee{id=2, name='李四', age=59, salary=6666.66}
  Employee{id=4, name='赵六', age=8, salary=7777.77}
  Employee{id=6, name='马云', age=35, salary=9876.23}
  Employee{id=8, name='乔布斯', age=59, salary=9387.33}
  Employee{id=9, name='扎克伯格', age=35, salary=6786.23}
  ------------------------------
  Employee{id=1, name='张三', age=18, salary=9999.99}
  Employee{id=9, name='扎克伯格', age=35, salary=6786.23}
  Employee{id=4, name='赵六', age=8, salary=7777.77}
  Employee{id=2, name='李四', age=59, salary=6666.66}
  Employee{id=8, name='乔布斯', age=59, salary=9387.33}
  Employee{id=6, name='马云', age=35, salary=9876.23}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java StreamJava 8 中引入的一种新的数据处理方式,它可以让你以一种声明式的方式来处理数据集合。Stream API 可以极大地简化 Java 程序的编写工作,使代码更加简洁、清晰,同时也可以提高程序的性能。 下面是 Java Stream 的常用操作: 1. 创建 Stream:可以通过集合、数组、文件等方式创建 Stream。 2. 中间操作:对 Stream 进行转换、过滤等操作,但不会执行任何操作。 3. 终止操作:对 Stream 进行计算、打印等操作,会执行 Stream操作。 4. 聚合操作:对 Stream 进行聚合操作,如求和、求最大值、求平均值等。 下面是一些常用的 Stream 操作示例: 1. 创建 Stream ``` List<String> list = Arrays.asList("Java", "Python", "C++", "JavaScript"); Stream<String> stream = list.stream(); // 通过集合创建 Stream IntStream intStream = IntStream.range(0, 10); // 创建一个 IntStream ``` 2. 中间操作 ``` stream.filter(s -> s.startsWith("J")) // 过滤出以 J 开头的字符串 .map(String::toUpperCase) // 将字符串转为大写 .sorted() // 排序 .distinct() // 去重 .limit(2); // 取前两个元素 ``` 3. 终止操作 ``` stream.forEach(System.out::println); // 遍历打印 Stream 中的元素 stream.count(); // 计算 Stream 中的元素个数 stream.max(String::compareTo); // 找出 Stream 中的最大值 stream.min(String::compareTo); // 找出 Stream 中的最小值 stream.reduce((a, b) -> a + b); // 将 Stream 中的所有元素累加起来 stream.collect(Collectors.toList()); // 将 Stream 转为 List ``` 4. 聚合操作 ``` IntStream intStream = IntStream.of(1, 2, 3, 4, 5); intStream.sum(); // 求和 intStream.average(); // 求平均值 intStream.max(); // 求最大值 intStream.min(); // 求最小值 ``` 这些仅是 Java Stream 的一部分常用操作,还有很多其他的操作方式。通过使用 Stream API,可以大大简化代码的编写,提高程序的性能和可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值