Java Stream Filter详解

在Java 8引入的Stream API中,filter方法是常用的一种方法,用来对流中的元素进行过滤操作。通过filter方法可以筛选出符合指定条件的元素,从而对数据进行筛选和处理。本文将详细介绍Java Stream中的filter方法的使用方法和示例。
1. filter方法的基本用法
在Java Stream中,filter方法用来对流中的元素进行条件过滤,只留下满足指定条件的元素。filter方法接受一个Predicate函数式接口作为参数,该接口定义了一个用来判断元素是否符合条件的方法。如果Predicate接口中的方法返回true,则该元素会被保留;如果返回false,则该元素将被过滤掉。
下面是filter方法的基本语法:
Stream<T> filter(Predicate<? super T> predicate)
其中,T表示流中的元素的类型,Predicate是一个函数式接口,用来定义过滤条件。
2. 示例代码
接下来通过几个示例代码来演示filter方法的使用。
示例1:过滤出偶数
下面的示例代码演示了如何使用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]
在这个示例中,我们首先创建了一个包含1到10的整数的列表。然后使用stream方法将该列表转换为一个流,接着使用filter方法过滤出所有的偶数,最后通过collect方法将结果收集到一个新的列表中。
示例2:过滤出长度大于5的字符串
下面的示例代码演示了如何使用filter方法来过滤出一个字符串流中长度大于5的字符串:
List<String> strings = Arrays.asList("apple", "banana", "orange", "pear", "grape");
List<String> filteredStrings = strings.stream()
.filter(str -> str.length() > 5)
.collect(Collectors.toList());
System.out.println(filteredStrings);
运行结果:
[banana, orange]
这里,我们首先创建了一个包含几个水果名称的字符串列表。然后使用stream方法将其转换为一个流,接着使用filter方法过滤出所有长度大于5的字符串,最后通过collect方法将结果收集到一个新的列表中。
3. 注意事项
在使用filter方法时,需要注意以下几点:
filter方法不会改变原始的流,而是返回一个新的流。filter方法是一个惰性操作,只有在终结操作(如collect、forEach等)被调用时才会执行。- 可以多次调用
filter方法对流进行多次过滤。
4. 总结
本文对Java Stream中的filter方法进行了详细介绍,包括基本用法、示例代码和注意事项。通过学习filter方法的使用,可以方便地对流中的元素进行条件过滤,实现数据的筛选和处理。
极客教程