stream流filter().filter()的作用
时间: 2023-11-29 15:47:30 浏览: 71
stream流的filter()方法用于过滤流中的元素,只保留满足条件的元素。它接受一个Predicate<T>类型的参数,该参数是一个函数式接口,用于判断流中的元素是否满足条件。如果满足条件,则将该元素保留下来,否则将其过滤掉。filter()方法返回一个新的流,其中包含满足条件的元素。
以下是一个示例代码,演示如何使用filter()方法过滤出List中的偶数元素:
```java
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenList = list.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenList); // 输出:[2, 4, 6]
```
上述代码中,我们首先创建了一个包含1到6的List,然后使用stream()方法将其转换为一个流。接着使用filter()方法过滤出偶数元素,最后使用collect()方法将过滤后的结果收集到一个新的List中。
相关问题
stream .filter .map
在Java Stream API中,`filter()` 和 `map()` 是两个非常重要的操作方法。
1. **filter()**: 这是一个流转换操作,用于过滤出满足特定条件的元素。它接受一个谓词函数作为参数,这个函数接收一个元素并返回一个布尔值。如果函数返回true,则该元素会被保留在流中继续处理;反之则被丢弃。例如:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
```
这将创建一个新的流,只包含原列表中的偶数。
2. **map()**: 这也是个流转换操作,它接收一个函数作为参数,将每个流元素映射成新的元素。这个函数通常会改变元素的形式或计算新的值。例如:
```java
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> lengths = names.stream()
.map(String::length)
.collect(Collectors.toList());
```
这会返回一个新列表,其中包含了原列表中每个字符串名字的长度。
.stream.filter.filter什么意思
在Java Stream API中,`.stream().filter(filter).filter(filter)`连续调用两次`filter`方法是用来对流进行过滤操作的。这里的第一个`filter(predicate)`接受一个谓词(Predicate),用于筛选出满足条件的元素。然后,第二次的`filter`也是同样的过程,它会对前一次过滤后的结果再次应用另一个谓词,进一步筛选数据。
例如:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.filter(n -> n > 2) // 过滤掉不大于2的数
.filter(n -> n % 2 == 0) // 再次过滤掉奇数
.forEach(System.out::println); // 输出偶数:4, 6
```
这里首先保留大于2的数,然后再保留能被2整除的数。如果不希望连续调用两次,可以将第二个`filter`替换为一个单独的`filter`,并将两个谓词组合成一个复合谓词:
```java
numbers.stream()
.filter(n -> n > 2 && n % 2 == 0)
.forEach(System.out::println);
```
阅读全文