Java 流 API 过滤器

javaobject oriented programmingprogramming更新于 2024/8/7 22:52:00

流过滤器函数返回由此流中满足指定谓词的项目组成的流。这是一个中级操作。这些操作始终是惰性的,即运行过滤器函数或其他中间操作实际上不会过滤任何内容;相反,它会生成一个新的流,当遍历时,该流包含满足所提供谓词的初始流的项目。

语法

Stream<T> filter(Predicate<? super T> predicate)

当 T 是 predicate 的输入类型并且 stream 是接口时。

返回类型

一个新的流。

实现

  • 消除可能被分为 0 到 10 的数字范围的项目。

  • 删除以特定索引开头的大写字母的条目。

  • 删除以特定字母结尾的组件。

示例 1:filter() 方法,具有过滤可被 5 整除的元素的操作

// Java 程序获取由以下内容组成的流元素

import java.util.*;
public class Example {
   public static void main(String[] args){
      List<Integer> list = Arrays.asList(3, 4, 6, 12, 20);
      list.stream()
         .filter(num -> num % 5 == 0)
         .forEach(System.out::println);
   }
}

输出

20

示例 2:filter() 方法,操作为过滤索引 1 处带有大写字母的元素

// Java 程序获取由元素组成的流

import java.util.stream.Stream;
public class Example  {
   public static void main(String[] args) {
      Stream<String> stream = Stream.of("class", "FOR", "QUIZ", "waytoclass");
      stream.filter(str -> Character.isUpperCase(str.charAt(1)))
         .forEach(System.out::println);
   }
}

输出

FOR
QUIZ

示例 3:filter() 方法,用于过滤以自定义字母结尾的元素

// Java 程序获取由元素组成的流
import java.util.stream.Stream;
public class Example {

   public static void main(String[] args){
      Stream<String> stream = Stream.of("Class", "FOR", "Quiz", "WaytoClass");
      stream.filter(str -> str.endsWith("s"))
      .forEach(System.out::println);
   }
}

输出

Class
WaytoClass

结论

改进 Java 代码功能的一种方法是利用 filter() 方法。与强制或有条不紊的方法相反。但是,在使用 filter() 函数时需要注意一些事项。

例如,链接多个过滤方法可能会导致代码运行缓慢。这样就可以创建一个包含满足谓词条件的元素的新流作为中间操作。因此,减少您进行的 filter() 调用数量的关键是将谓词合并为一个句子。


相关文章