java list.stream.filter
时间: 2024-08-16 11:05:08 浏览: 131
`java.util.List.stream().filter()` 是Java 8引入的Stream API的一部分,用于处理集合数据。它允许你在列表中应用过滤条件,返回一个新的Stream对象,其中只包含满足特定条件的元素。这个操作是非阻塞的,也就是说,不会立即计算结果,而是延迟到实际需要的时候。
例如,假设你有一个整数列表,你可以使用 `filter()` 来创建一个新的流,只包含偶数:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0) // 这里是过滤条件,n 必须能被2整除
.collect(Collectors.toList()); // 转换回列表形式
```
相关问题
java List.stream.filter
Java中的List接口提供了一个stream方法,该方法返回一个流对象,可以使用流操作对列表进行处理。其中,filter操作是一种流操作,用于根据指定的条件过滤列表中的元素。
filter方法接受一个Predicate参数,该参数是一个函数式接口,用于定义过滤条件。在filter操作中,只有满足该条件的元素才会被保留下来,而不满足条件的元素将被剔除。最终,filter操作返回一个新的流对象,其中包含符合过滤条件的元素。
以下是使用List.stream.filter方法的示例代码:
```java
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// 使用filter操作过滤只保留偶数
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.toList();
System.out.println(evenNumbers); // 输出:[2, 4, 6, 8, 10]
}
}
```
java list.stream().filter和list.stream().peek却别
在Java 8的Stream API中,`filter()` 和 `peek()` 都是用来操作集合的高阶函数,但它们的作用略有区别。
1. **`filter(Predicate<T>)`:** 这个方法用于过滤流中的元素。它接受一个谓词(Predicate),这个谓词是一个返回布尔值的函数,如果元素满足这个条件(谓词返回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, 4]`。
2. **`peek(Consumer<T>):**** 这个方法应用于每个元素上,但它并不改变元素本身或流的结构。`peek()` 接收一个消费者(Consumer),该消费者对每个元素执行一些副作用操作(例如打印、计数等),而不会影响实际的流结果。例如:
```java
List<String> words = Collections.singletonList("hello");
words.stream()
.peek(System.out::println)
.forEach(System.out::println); // 打印 "hello" 后,再打印列表中原有的每一个元素
```
输出将是:
```
hello
hello
```
总结来说,`filter()` 改变了流的内容,而 `peek()` 只是做了额外的操作但不影响最终结果。如果你关心的是过滤后的数据,用 `filter()`;如果你需要对元素做些额外操作但结果不变,用 `peek()`。
阅读全文
相关推荐
















