# Java 8 Stream Filter 带有示例

> 原文： [https://beginnersbook.com/2017/10/java-8-stream-filter/](https://beginnersbook.com/2017/10/java-8-stream-filter/)

在上一个教程中，我们了解了 [Java Stream](https://beginnersbook.com/2017/10/java-8-stream-tutorial/) 。在完成本教程之前，我建议您阅读该指南。在本指南中，我们将讨论 Java 流过滤器。 filter（）是一个中间操作，它从流中读取数据并在根据给定条件转换数据后返回新流。让我们先看一个简单的例子，然后我们将看到流过滤器的其他方法的示例。

## Java 流过滤器的一个简单示例（）

在这个例子中，我们使用`stream()`方法从名称列表创建一个流，然后我们使用 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：流过滤器（）和收集（）

我们可以创建一个流并在一行中应用过滤器，如下例所示。这里的 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);           

    }

}
```

Output:

```java
Melisandre
Daenerys
Joffery
```

## 示例 2：具有多个条件的流过滤器（）

在上面的例子中，我们已经看到 filter（）方法中只有一个条件。我们可以在使用 java 中的[逻辑运算符连接的 filter（）方法中有多个条件。在下面的示例中，我们在使用和（＆amp;＆amp;＆amp;）逻辑运算符连接的 filter 方法中有两个条件。](https://beginnersbook.com/2017/08/operators-in-java/)

```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);           

    }

}
```

Output:

```java
Joffery
```

## 示例 3：Java 中的流过滤器（）和 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);        

    }

}
```

Output:

```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/)