Java Stream API 过滤器


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

语法

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

当 T 是谓词的输入类型,stream 是一个接口时。

返回类型

一个新的 stream。

实现

  • 消除可以分为 0 到 10 之间的一系列数字的项目。

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

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

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

// Java Program to get a Stream Consisting of the Elements

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 Program to Get Stream Consisting of Elements

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 Program to Get a Stream Consisting of Elements
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

结论

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

例如,链接多个 filter 方法会带来使代码运行速度变慢的风险。这是因为可以创建一个包含满足谓词条件的元素的新 stream 作为中间操作。因此,减少 filter() 调用次数的关键是将谓词合并到一个句子中。

更新于: 2023-08-01

237 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告