Java filter()方法在后台是如何工作的

Java filter()方法在后台是如何工作的

Java的filter()方法允许我们根据指定的条件对流中的元素进行过滤。它是一个高阶函数的一部分,用于对流项应用特定的行为。该方法接受一个谓词(predicate)作为参数,并返回与谓词匹配的元素列表。但是这里的问题是filter()方法在后台是如何工作的。本文旨在通过一些示例程序解释这个问题。

filter()方法在后台的工作原理

在深入了解filter()方法之前,让我们先熟悉一下I/O流。它是在执行Java的输入和输出操作时使用的一种抽象。基本上,输入流用于从键盘、磁盘文件等来源获取输入。输出流则指向数据显示或写入的目的地。

现在回到我们关于filter()方法的讨论。之前我们提到了“谓词”这个术语,你可能想知道这是什么,以及在filter()方法中使用它的目的是什么。过滤的整个过程都围绕着这个谓词展开。它是作为参数传递给filter()方法的函数式接口,并作为过滤流的非匹配元素的条件。最初,这个方法不会丢弃非匹配的元素。相反,它会生成一个只包含满足谓词条件的元素的新流。

注意,filter()方法是一个无状态的中间操作,这意味着它不会产生结果,直到我们将其与count()、collect()或forEach()等终端操作结合使用。这里,无状态意味着它不会存储先前操作的任何信息以供进一步使用。

高阶函数有两种类型

  • 中间操作 - 它们处理输入流的元素。

  • 终端操作 - 它们触发中间操作以产生非流结果。

filter()方法的语法

filter(predicate);

方法

  • 使用Arrays.asList()方法创建一个固定大小的列表。

  • 现在,使用filter()方法和stream()和forEach()来仅过滤出奇数。在这里,stream()指定输入形式为流,我们将使用forEach()来迭代和打印奇数。

  • 再次,使用filter()方法与stream()和count()一起打印奇数的计数。

示例1

以下示例说明了filter()方法的使用。

import java.util.*;
public class Fltr {
   public static void main(String[] args) {
      // creating a list of numbers
      List<Integer> numbers = Arrays.asList(5, 21, 32, 14, 63, 19, 10);
      // printing all numbers in the list
      System.out.println("List of all numbers: " + numbers);
      System.out.println("List of odd numbers: ");
      // filtering only odd numbers from list
      numbers.stream()
         .filter(nums -> nums % 2 == 1)
         .forEach(System.out::println);
      System.out.println("Count of odd numbers: ");
      // printing the count of odd numbers
      System.out.println(numbers.stream()
         .filter(nums -> nums % 2 == 1)
         .count());
   }
}

输出

List of all numbers: [5, 21, 32, 14, 63, 19, 10]
List of odd numbers:
5
21
63
19
Count of odd numbers:
4

方法

  • 第一步是导入java.util.function.Predicate以启用对Predicate类的使用。

  • 定义一个固定大小的列表。

  • 现在,使用Predicate定义一个抽象方法test()来设置打印奇数的条件。

  • 使用filter()方法以及stream()和forEach()方法来过滤出奇数。将Predicate类的实例作为参数传入filter()方法中。

  • 再次使用filter()方法以及stream()和count()方法来打印奇数的个数。

示例2

让我们看另一个使用filter()方法并使用Predicate类的示例。

import java.util.*;
import java.util.function.Predicate;
public class Fltr {
   public static void main(String[] args) {
      // creating a list of numbers
      List<Integer> numbers = Arrays.asList(5, 21, 32, 14, 63, 19, 10);
      // printing all numbers in the list
      System.out.println("List of all numbers: " + numbers);
      System.out.println("List of odd numbers: ");
      // filtering only odd numbers from list
      Predicate<Integer> newNumbers = new Predicate<Integer>()
      {
         @Override
         public boolean test(Integer nums) {
            return nums % 2 == 1;
         }
      };
      numbers.stream()
         .filter(newNumbers)
         .forEach(System.out::println);
      System.out.println("Count of odd numbers: ");
      // printing the count of odd numbers
      System.out.println(numbers.stream()
         .filter(newNumbers)
         .count());
   }
}

输出

List of all numbers: [5, 21, 32, 14, 63, 19, 10]
List of odd numbers:
5
21
63
19
Count of odd numbers:
4

结论

filter()方法在后台通过按需将条件函数应用于每个元素来工作。我们通过Java示例程序详细定义和解释了filter()方法的工作方式。此外,我们还发现了Java编程语言中可用的高阶函数类型。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程