stream的filter方法
stream的filter方法是Java 8引入的一个用于对集合进行筛选的方法。它接受一个Lambda表达式作为参数,根据Lambda表达式的条件对集合中的元素进行过滤,并返回一个新的Stream对象。
核心概念
在了解filter方法的具体用法之前,我们先来了解一下Stream和Lambda表达式的概念。
Stream是Java 8引入的一个新的API,它提供了一种更高效、更易用的集合操作方式。一个Stream代表一组元素的序列,支持串行和并行的操作。Stream的操作可以分为中间操作和终端操作两种。
其中中间操作可以链式调用,返回一个新的Stream。常见的中间操作有filter、map、distinct等。
而终端操作则会遍历Stream,触发实际的计算,返回一个结果或者一个副作用。常见的终端操作有forEach、collect、reduce等。
Lambda表达式是Java 8引入的一种新的语法,用于简化函数式编程。它可以将一个函数式接口(只包含一个抽象方法的接口)作为一个可赋值的对象。Lambda表达式可以用来替代一部分匿名内部类的写法。
用法示例
以下是一个示例,说明如何使用filter方法对一个整数列表进行筛选,只保留大于5的元素。
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> filteredNumbers = numbers.stream
.filter(n -> n > 5)
.List();
System.out.println(filteredNumbers); // 输出:[6, 7, 8, 9, 10]
```
在上面的示例中,我们首先创建了一个列表`numbers`,它包含了1到10的整数。然后我们调用`numbers.stream(`方法将其转换为一个Stream对象。接着我们调用`filter`方法传入一个Lambda表达式`n -> n > 5`,该表达式会判断元素n是否大于5、`filter`方法会过滤出所有满足条件的元素,返回一个新的Stream对象。最后我们调用`collect`方法将Stream中的元素收集到一个新的列表中,保存在`filteredNumbers`变量中。
java stream在实际应用中,我们可以根据具体需求编写不同的Lambda表达式,以实现更加复杂的过滤逻辑。
Stream的延迟执行特性
需要注意的是,Stream的中间操作是延迟执行的。这意味着中间操作不会立即触发实际的计算,而是在终端操作时才会进行。延迟执行可以提高性能,避免不必要的计算开销。
以下是一个示例,演示了Stream的延迟执行特性。
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Stream<Integer> stream = numbers.stream
.filter(n ->
System.out.println("filter: " + n);
return n > 5;
});
```
执行以上代码,输出结果如下:
filter: 1
filter: 2
filter: 3
filter: 4
filter: 5
filter: 6
filter: 7
filter: 8
filter: 9
filter: 10
10
从输出结果可以看出,filter操作并没有立即执行,而是在forEach操作时才执行。这是因为filter操作只是生成了一个新的Stream对象,而并没有进行实际的计算。只有调用forEach方法时,才会对Stream中的元素进行遍历和输出。
结语
Stream的filter方法是一种非常有用的集合操作方法,它用于对集合进行筛选,保留符合条件的元素。通过与Lambda表达式的结合使用,我们可以很方便地实现各种复杂的过滤逻辑。掌握了filter方法的用法,我们可以更加灵活和高效地处理集合数据。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论