迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java 中的 Stream 的 reduce 操作

作者:迹忆客 最近更新:2023/11/13 浏览次数:

本文将讨论 reduce() 操作细节并讨论它的一些示例。在讨论 reduce() 操作之前。让我们首先讨论减少。


Java 中的 reduce 是什么

JDK 中的许多终端操作(例如平均值、求和、最小值、最大值和计数)结合流的内容以输出单个值。还原操作执行相同的操作并返回单个流。

此外,JDK 包括返回集合而不是单个值的还原操作。许多还原过程完成特定的工作,例如计算值的平均值或对项目进行分类。

另一方面,JDK 具有称为还原和收集的通用还原操作。


Java 8 中的流 reduce() 操作

reduce() 操作是一种通用的还原操作。reduce() 操作的语法是:

T reduce(T identity, BinaryOperator<T> accumulator)

reduce 操作有两个参数:

  • identityidentity 元素既是还原的起始值,也是流不包含元素时的默认结果。
  • accumulatoraccumulator 函数接受两个参数:部分还原结果和流的下一个元素。它给了我们一个新的部分结果。

reduce() 操作是一种终端操作。


在 Java 中使用 reduce() 运算求和

让我们使用 Java 中的 Stream API 计算数组中所有元素的总和。看下面的代码:

import java.util.Arrays;
public class SimpleTesting {
  public static void main(String args[]) {
    int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
    int sum = Arrays.stream(numbers).reduce(0, (a, b) -> a + b);

    System.out.print("sum: " + sum);
  }
}

输出:

sum: 2422

如果我们不使用 reduce() 函数,我们将不得不编写下面的代码来获取所有元素的总和。请参见下面的示例。

import java.util.Arrays;
public class SimpleTesting {
  public static void main(String args[]) {
    int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
    int sum = 0;
    for (int i : numbers) {
      sum += i;
    }
    System.out.println("sum : " + sum);
  }
}

输出:

sum : 2422

在 Java 中使用 reduce() 和方法参考求和

我们还可以按如下方式传递 sum() 方法引用 Integer::sum 以获得所有元素的总和。看下面的代码:

import java.util.Arrays;
public class SimpleTesting {
  public static void main(String args[]) {
    int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
    int sum = Arrays.stream(numbers).reduce(0, Integer::sum);

    System.out.print("sum: " + sum);
  }
}

输出:

sum: 2422

如果数组为空并且我们通过它来获取元素的总和,那么它不会抛出任何异常,而是给出零结果。请参见下面的示例。

import java.util.Arrays;
public class SimpleTesting {
  public static void main(String args[]) {
    int[] numbers = {};
    int sum = Arrays.stream(numbers).reduce(0, Integer::sum);

    System.out.print("sum: " + sum);
  }
}

输出:

sum: 0

如我们所见,如果数组为空,则返回标识元素。


在 Java 中使用 reduce() 操作查找最小值和最大值

通常,要找到数组中的最小和最大元素,我们使用 for 循环和 if-else 语句的组合,例如:

public class SimpleTesting {
  public static void main(String args[]) {
    int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
    // finding the min element
    int min = numbers[0];
    for (int i : numbers) {
      if (min > i) {
        min = i;
      }
    }
    // finding the max element
    int max = numbers[0];
    for (int i : numbers) {
      if (max < i) {
        max = i;
      }
    }
    // printing the max and min value
    System.out.println("max: " + max);
    System.out.println("min: " + min);
  }
}

输出:

max: 985
min: 20

我们可以使用 reduce() 操作在数组中找到最小和最大元素,这使我们的代码更加简洁。请参见下面的示例。

import java.util.Arrays;

public class SimpleTesting {
  public static void main(String args[]) {
    int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
    // finding the min element
    int min = Arrays.stream(numbers).reduce(Integer.MAX_VALUE, (a, b) -> a < b ? a : b);
    // finding the max element
    int max = Arrays.stream(numbers).reduce(Integer.MIN_VALUE, (a, b) -> a > b ? a : b);
    // printing the max and min value
    System.out.println("max: " + max);
    System.out.println("min: " + min);
  }
}

输出:

max: 985
min: 20

我们还可以使用方法引用来计算数组中的最小和最大元素。看下面的代码:

import java.util.Arrays;
public class SimpleTesting {
  public static void main(String args[]) {
    int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
    // finding the min element
    int min = Arrays.stream(numbers).reduce(Integer.MAX_VALUE, Integer::min);
    // finding the max element
    int max = Arrays.stream(numbers).reduce(Integer.MIN_VALUE, Integer::max);
    // printing the max and min value
    System.out.println("max: " + max);
    System.out.println("min: " + min);
  }
}

输出:

max: 985
min: 20

结论

在本教程中,我们了解了还原操作。然后,我们深入探讨了 reduce() 操作的主题。最后,我们看到了几个如何简洁地执行基本算术函数的示例。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Java 中的 volatile 关键字

发布时间:2023/11/13 浏览次数:173 分类:Java

本文讨论了 Java 中的 volatile 关键字及其优缺点,并举例说明了如何使用。Java 是一种非常流行的编程语言,通过了解 Java,我们可以很容易地理解它为什么会在编程社区中获得这样的地位。

Java 中的 StringUtils

发布时间:2023/11/13 浏览次数:80 分类:Java

本文介绍 Java 中的 StringUtils 类是什么。本文介绍什么是 StringUtils 以及如何在 Java 中使用它来处理字符串。StringUtils 是一个用于处理 String 的类,它提供了比 Java String 类更多的实用方法。

Java 中的 flatMap

发布时间:2023/11/13 浏览次数:132 分类:Java

本文介绍 flatMap 以及如何在 Java 中使用它。本文介绍 flatMap 以及如何在 Java 中使用它。flatMap 是 Java 流中的一个操作/函数,用于在执行某些功能性任务后获取新流。在这里,我们将讨论 flatMap

在 Java 中将 Stream 元素转换为映射

发布时间:2023/11/13 浏览次数:77 分类:Java

我们将使用 Java 将流元素转换为映射。我们将向你展示如何使用 Collectors.toMap() 从 Java 字符串中提取映射。我们将讨论 Java Streams 的实际用途以及如何将流元素转换为映射元素。

Java 中的 findFirst 流方法

发布时间:2023/11/13 浏览次数:171 分类:Java

本教程介绍 Java 中的 findFirst 流方法。java.util.stream API 是在 Java 8 中引入的;它用于处理对象的集合。不同的源(例如数组或集合)可以创建流。

修复 Java NoClassDefFoundError 错误

发布时间:2023/11/13 浏览次数:199 分类:Java

本文介绍如何修复 Java 中的 NoClassDefFoundError。在 Java 语言中,错误是主要由于缺乏资源而发生的异常。此外,错误无法在编译时捕获并在运行时发生。

在 Java 中扩展 Comparable

发布时间:2023/10/19 浏览次数:97 分类:Java

本教程展示了如何在 Java 中清除 StringBuilder 本指南将了解在 Java 中扩展 Comparable 接口。它写成 Comparable。它是一个由 Java 中的许多类实现的接口。

Java 中的 Predicate 是什么

发布时间:2023/10/19 浏览次数:109 分类:Java

本文介绍 Java 8 中的 Predicate 接口。本教程通过 Java 示例介绍 Predicate 接口。Predicate 是 Java 中的一个接口,用作 lambda 表达式或方法引用的目标赋值。

Java 输出参数

发布时间:2023/10/19 浏览次数:93 分类:Java

本教程演示了 Java 是否有类似 C# 的 out 参数关键字。Java 不支持像 C# 中的 out 和 ref 之类的关键字在方法中通过引用传递,因为值仅在 Java 中传递参数。该值甚至通过引用。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便