stream流中filter
时间: 2023-07-08 18:47:42 浏览: 48
stream流中的 filter() 方法用于根据指定的条件过滤流中的元素,返回一个包含符合条件的元素的新流。它接收一个 Predicate<T> 类型的参数,该参数是一个函数式接口,用于判断流中的元素是否符合条件。例如,下面的代码使用 filter() 方法过滤出一个整数流中大于 5 的元素:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> filtered = numbers.stream()
.filter(num -> num > 5)
.collect(Collectors.toList());
System.out.println(filtered); // [6, 7, 8, 9, 10]
```
在上面的代码中,我们使用了 stream() 方法将 List 转换成一个流,然后使用 filter() 方法过滤出大于 5 的元素,最后使用 collect() 方法将结果转换成一个 List。
相关问题
stream流中filter过滤
stream流中的filter()方法用于对流中的元素进行过滤操作。它接受一个Predicate函数式接口作为参数,该接口定义了一个用于判断元素是否满足条件的test()方法。
在调用filter()方法时,流中的每个元素会依次传入Predicate的test()方法中,如果test()方法返回true,表示该元素满足条件,会被保留在流中;如果返回false,表示该元素不满足条件,会被过滤掉。
下面是一个示例代码,演示了如何使用filter()方法对一个整数流进行过滤,只保留偶数:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
.filter(num -> num % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // 输出[2, 4, 6, 8, 10]
```
在上述代码中,我们首先创建了一个整数列表numbers。然后,通过调用stream()方法将其转换为流。接着,使用filter()方法传入一个Lambda表达式`num -> num % 2 == 0`作为条件,筛选出偶数。最后,使用collect()方法将过滤后的结果收集到一个新的列表中,并输出结果。
通过使用filter()方法,我们可以根据自己的需求对流中的元素进行灵活的过滤操作。
stream流中filter工作原理
在流中使用 filter 操作是为了过滤流中的元素,只保留符合特定条件的元素。具体实现方式是通过传递一个谓词(Predicate)给 filter 操作,该谓词用于测试流中的每个元素,如果元素符合谓词的条件,则保留该元素,否则将其过滤掉。
在 Java 8 中,Stream 接口中提供了 filter 方法来支持这一功能。该方法返回一个新的流,其中包含原始流中符合条件的元素。
例如,下面的代码演示了如何使用 filter 方法过滤出列表中所有大于 5 的元素:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> filteredNumbers = numbers.stream().filter(n -> n > 5).collect(Collectors.toList());
```
上述代码中,filter 方法接收一个 Lambda 表达式 `n -> n > 5`,该表达式定义了一个谓词,用于测试流中的每个元素是否大于 5。最后通过 collect 方法将过滤后的结果收集到一个新的列表中。