📜  Java8 Stream Filter(1)

📅  最后修改于: 2023-12-03 15:01:35.786000             🧑  作者: Mango

Java8 Stream Filter

Java8引入的Stream API提供了一种处理集合的新方式。其中,Filter是Stream API中最基本和常用的操作之一。

Filter的作用

Filter是一种中间操作,它接收一个Predicate类型的Lambda表达式作为参数,返回一个经过筛选后的新Stream。

具体来说,Filter通过遍历源Stream,对每个元素应用Predicate,将返回值为true的元素留下来,形成新的Stream。

代码示例:

List<String> list = Arrays.asList("apple", "banana", "orange", "lemon");
Stream<String> stream = list.stream();

//过滤出长度为5的字符串
Stream<String> result = stream.filter(s -> s.length() == 5); 
result.forEach(System.out::println); //输出 "apple", "lemon"

上述代码中,我们首先获取了一个List的Stream,然后通过filter操作,留下了长度为5的字符串,最终通过forEach方法输出结果。

Filter的链式调用

Filter操作不仅可以单独使用,还可以与其他Stream操作一同进行链式调用。例如,我们可以通过map操作将Stream变为Stream,再通过filter操作筛选出大于等于3的数,最后通过forEach方法输出结果:

List<String> list = Arrays.asList("1", "2", "3", "4");
Stream<String> stream = list.stream();

//将Stream<String>变为Stream<Integer>,过滤出大于等于3的数
stream.map(Integer::parseInt)
      .filter(n -> n >= 3)
      .forEach(System.out::println); //输出 "3", "4"
Filter的性能

Filter操作会对Stream中每个元素进行遍历和操作,因此在使用时需要注意性能问题。为了减轻压力,我们可以在调用filter前先进行类似于SQL的“where”子句过滤,尽可能减少元素的数量。

总结

Java8 Stream API中的Filter是一种常用的中间操作,可以通过Predicate进行条件筛选,返回一个新的Stream。Filter操作可以与其他Stream操作链式调用,但需要注意性能问题。