🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Java 8 流过滤器 > 原文: [https://beginnersbook.com/2017/10/java-8-stream-filter/](https://beginnersbook.com/2017/10/java-8-stream-filter/) 在上一个教程中,我们了解了 [Java 流](https://beginnersbook.com/2017/10/java-8-stream-tutorial/) 。在完成本教程之前,我建议您阅读该指南。在本指南中,我们将讨论 Java 流过滤器。 `filter()`是一个中间操作,它从流中读取数据并在根据给定条件转换数据后返回新流。让我们先看一个简单的例子,然后我们将看到流过滤器的其他方法的示例。 ## Java 流的`filter()`的一个简单示例 在这个例子中,我们使用`stream()`方法从名称列表创建一个流,然后我们使用流的`filter()`创建另一个长名称流。如上所述,流过滤器将一个流的数据转换为另一个流。 ```java import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class Example { public static void main(String[] args) { List<String> names = Arrays.asList("Melisandre","Sansa","Jon","Daenerys","Joffery"); //Creating the stream of all names Stream<String> allNames = names.stream(); //Creating another stream by filtering long names using filter() Stream<String> longNames = allNames.filter(str -> str.length() > 6); //displaying the long names longNames.forEach(str->System.out.print(str+" ")); } } ``` 输出: ```java Melisandre Daenerys Joffery ``` 让我们再看几个 Java 流过滤器的例子。 ## 示例 1:流的`filter()`和`collect()` 我们可以创建一个流并在一行中应用过滤器,如下例所示。这里的`collect()`方法收集最终流并将其转换为列表 ```java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Example { public static void main(String[] args) { List<String> names = Arrays.asList("Melisandre","Sansa","Jon","Daenerys","Joffery"); List<String> longnames = names.stream() // converting the list to stream .filter(str -> str.length() > 6) // filter the stream to create a new stream .collect(Collectors.toList()); // collect the final stream and convert it to a List longnames.forEach(System.out::println); } } ``` 输出: ```java Melisandre Daenerys Joffery ``` ## 示例 2:具有多个条件的流`filter()` 在上面的例子中,我们已经看到`filter()`方法中只有一个条件。我们可以在使用 java 中的[逻辑运算符](https://beginnersbook.com/2017/08/operators-in-java/)连接的`filter()`方法中有多个条件。在下面的示例中,我们在使用和(`&&`)逻辑运算符连接的`filter`方法中有两个条件。 ```java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Example { public static void main(String[] args) { List<String> names = Arrays.asList("Melisandre","Sansa","Jon","Daenerys","Joffery"); List<String> longnames = names.stream() .filter(str -> str.length() > 6 && str.length() < 8) //Multiple conditions .collect(Collectors.toList()); longnames.forEach(System.out::println); } } ``` 输出: ```java Joffery ``` ## 示例 3:Java 中的流的`filter()`和`map()`方法 ```java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Example { public static void main(String[] args) { List<Integer> num = Arrays.asList(1,2,3,4,5,6); List<Integer> squares = num.stream() .map(n -> n * n) .collect(Collectors.toList()); System.out.println(squares); } } ``` 输出: ```java [1, 4, 9, 16, 25, 36] ``` #### 更多 Java 流过滤器的教程: 1. [Java 8 - 按键和值过滤映射](https://beginnersbook.com/2017/10/java-8-filter-a-map-by-keys-and-values/) 2. [Java 8 - 从流中过滤空值](https://beginnersbook.com/2017/10/java-8-filter-null-values-from-a-stream/)