Java 流操作

发布时间:2024-10-03 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java 流操作脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Java流 - Java流操作

外部迭代

当使用Java集合时,我们使用外部迭代。

在外部迭代中,我们为每个循环使用for或,或者为序列中的集合的集合和过程元素获取迭代器。

以下代码计算列表中所有奇整数的平方和。

它使用每个循环访问列表中的每一个元素,然后使用if语句来过滤奇整数。

之后,它计算平方,最后存储平方和与和变量。

import java.util.Arrays;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = 0;
    for (int n : numbers) {
      if (n % 2 == 1) {
        int square = n * n;
        sum = sum + square;
      }
    }
    System.out.println(sum);
  }
}

上面的代码生成以下结果。

Java 流操作


内部迭代

我们可以使用stream重写上面的代码。 它做的完全一样。

import java.util.Arrays;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = numbers.stream()
        .filter(n -> n % 2  == 1)
        .map(n  -> n * n)
        .reduce(0, Integer::sum);

    System.out.println(sum);
  }
}

在上面的代码中,我们没有使用循环语句来遍历List。 我们通过流在内部执行循环。

对于奇整数计算,我们使用lambda表达式。 我们首先做了过滤,然后映射然后减少。

上面的代码生成以下结果。

Java 流操作


顺序

外部迭代通常意味着顺序代码。顺序代码只能由一个线程执行。

流被设计为并行处理元素。

以下代码并行计算列表中奇整数的平方和。

import java.util.Arrays;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = numbers.parallelStream()
        .filter(n -> n % 2  == 1)
        .map(n  -> n * n)
        .reduce(0, Integer::sum);

    System.out.println(sum);
  }
}

我们做的只是用parallelStream()替换stream()。

使用流提供的内部迭代时,并行计算很容易。

上面的代码生成以下结果。

Java 流操作

命令式与功能式

在命令式编程中,我们不仅控制要做什么,还要如何做。

例如,当使用命令性编程来对列表中的整数求和时。 我们必须决定如何迭代列表中的每个元素。 我们可以使用for循环,for-each循环,或者我们可以从list中获取一个Iterator对象,并使用while循环。 然后我们也要做总和。

在声明性编程中,我们只需要告诉该做什么,该部分如何由系统本身处理。

集合支持命令式编程,而流支持声明式编程。

Streams API通过使用lambda表达式支持函数式编程。

我们要对流元素执行的操作通常通过传递lambda表达式完成。

流上的操作产生结果而不修改数据源。

中间业务终端业务

流支持两种类型的操作:

  • 中间操作
  • 终端操作

中间操作也称为惰性操作。

终端操作也称为急切操作。

惰性操作不处理元素,直到在流上调用热切操作。

流上的中间操作产生另一流。

Streams链接操作以创建流管道。

在下面的代码中filter()和map()都是惰性操作。 而reduce()是急切的操作。

import java.util.Arrays;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = numbers.parallelStream()
        .filter(n -> n % 2  == 1)
        .map(n  -> n * n)
        .reduce(0, Integer::sum);

    System.out.println(sum);
  }
}

上面的代码生成以下结果。

Java 流操作

脚本宝典总结

以上是脚本宝典为你收集整理的Java 流操作全部内容,希望文章能够帮你解决Java 流操作所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。