锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Java8 Stream 中的 reduce() 方法,执行聚合操作

时间:2022-09-24 21:30:00 amy限时继电器

初识 Stream 中的 reduce() 方法是在最后一次刷算法题的过程中,简洁干练的写法让我眼前一亮。

因此,我简单地学习并总结了写作方法:


正文

Java 8 API新的抽象被称为流动Stream,您可以通过声明处理数据。

Stream API可大大提高Java程序员的生产力使程序员能够写出高效、干净、简洁的代码。

这种风格将要处理的元素集合视为流动, 流在管道中传输, 管道节点可处理, 比如筛选, 排序、聚合等。

reduce()使用:

先看一下reduce() 方法内部,参数 BinaryOperator 接口继承了 BiFunction 接口:

Optional reduce(BinaryOperator accumulator);

简单来说,BinaryOperator 函数接口类似 Lambda 表达式(->),接收两个参数并产生一个结果,但其三个参数是相同的数据类型。

@Data public class User {     private String username;     private String gender;     private Integer age;     public User(){}      public User(String username, String gender, Integer age) {         this.username = username;         this.gender= gender;         this.age = age;     }      public static void main(final String... args) {         ArrayList list = new ArrayList<>();          list.add(new User("jimmy", "1", 30));         list.add(new User("amy", "2", 20));         list.add(new User("simmy", "1", 10));          // reduce 需要输入一个BinaryOperator接口,继承了BiFunction接口         // 简单说  需要输入两个相同类型的参数并返回相同类型的参数         // 预定义减法函数式         BinaryOperator add = (n1, n2) -> n1 n2;         BinaryOperator minus = (n1, n2) -> n1-n2;         list.stream().map(n->n.getAge()).reduce(add).ifPresent(n-> System.out.println(n));     // 加法         list.stream().map(n->n.getAge()).reduce(minus).ifPresent(n-> System.out.println(n));     // 减法          // 未预定义,直接写函数式         list.stream().map(n->n.getAge()).reduce((a,b)->a*b).ifPresent(n-> System.out.println(n));     // 乘法     } } // 输出结果: 60 0 6000

算法题

下面是我用的reduce参考聚合函数的场景:

题目:剑指offer》- 找出只出一次的数字 题目描述:给定一个非空整数组,除了一个一个元素只出现一次,每个元素都出现两次,找出只出现一次的元素。 思路:两个相同的数异或后来 0,一个数和 0 或者它本身,将所有的数异或后来得到 A、B 不同或不同的结果,然后得到 1 出现在这个数字的最右边 index,然后判断每个数右移 index 后是不是 1。 
    int[] nums = {1,2,3,4,5,6,7,89}      // 1.for循环写法     public int singleNumber_1(int[] nums) {         int num = nums[0];         for (int i = 1; i < nums.length; i  ) {             num ^= nums[i];         }         return num;     }      // 2.stream 写法     public int singleNumber_2(int[] nums) {         return Arrays.stream(nums).reduce((a, b) -> a^b).getAsInt();     }

看看,stream 的 reduce 聚合函数写法简单干练吗?


锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章