JDK8中Stream的Filter方法

590 阅读2分钟

「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战

前言

JDK8中Stream的Filter方法,你会用吗?

今天我们就来学习JDK8中Stream流的filter方法,从名称上面来看,就知道这个方法是用来过滤数据用的,下面我们就一起来学习一下吧。

JDK8中Stream之filter方法的使用

filter方法的功能就是过滤,过滤,还是他*的过滤。

先直接上一波代码示例看一下:

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("张三");
    list.add("张四");
    list.add("张五");
    list.add("赵三");
    list.add("赵四");
    list.add("赵五");
    System.out.println(list.stream().filter(a -> a.contains("张")).collect(Collectors.toList()));
}

通过上面的代码执行出来的结果如下:

[张三, 张四, 张五]

看完了上面的使用示例,你是否感觉到了一些熟悉呢,其实就是一个判断条件而已,其实使用起来还是非常简单的,通过filter方法进行过滤也更加方便。

在其内传入参数,参数为Predicate函数接口实现类,这个我们可以在filter源码中可以看的出来。

Stream<T> filter(Predicate<? super T> predicate);

由此,我们只需要传入一个自定义的Predicate函数接口,关于Predicate函数式接口,我已经在之前的文章写到了,大家有兴趣的话,可以自行去看一下。

如果我们不使用的JDK8的时候,又会如何进行过滤呢?下面来看一下一个笨方法。

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("张三");
    list.add("张四");
    list.add("张五");
    list.add("赵三");
    list.add("赵四");
    list.add("赵五");
    List<String> nowList = new ArrayList<>();
    for (String name : list){
        if(name.contains("张")){
            nowList.add(name);
        }
    }
    System.out.println(nowList);
}

在旧版本的JDK中,通常我们会使用上述的示例代码,放在如今算是很笨的方法了。

总结

今天我们又再次学习了filter方法的使用,对于集合数据的过滤,大家又有什么更好的方式可以解决呢?