前言
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方法的使用,对于集合数据的过滤,大家又有什么更好的方式可以解决呢?