使用传统的方式遍历集合,对集合中的数据进行过滤和使用Stream流的方式,遍历集合,对集合中的数据进行过滤
使用传统的方式遍历集合,对集合中的数据进行过滤
在Java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。
传统集合的多步遍历代码
几乎所有的集合都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的
添加、删除、获取外,最典型的就是集合遍历。
public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("张无忌"); list.add("周芷若"); list.add("赵敏"); list.add("张强"); list.add("张三丰"); for (String s : list) { System.out.println(s); } }
循环遍历的弊端
java8的Lambda让我们可以更加专注于做什么(What),而不是怎么做(How),这点此前已经结合内部类进行了对比说明。
>for循环的语法就是怎么做
>for循环的循环体才是做什么
我马上使用循环?因为要进行遍历。但循环是遍历的唯一方式吗?遍历是指每一个元素逐一进行处理,而并不是从第一个到
最后一个顺次处理的循环。前者是目的,后者是方式。
public class DoTest04 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("张无忌"); list.add("周芷若"); list.add("赵敏"); list.add("张强"); list.add("张三丰"); //只要张开头的元素,存储到一个集合中 ArrayList<String> listA = new ArrayList<>(); for (String s : list) { if (s.startsWith("张")){ listA.add(s); } } //只要姓名为3的人,存储到一个新集合中 ArrayList<String> listB = new ArrayList<>(); for (String s : listA) { if (s.length()==3){ listB.add(s); } } for (String s : listB) { System.out.println(s); } } }
使用Stream流的方式,遍历集合,对集合中的数据进行过滤
Stream流是JDK1.8之后出现的关注的是做什么,而不是怎么做
public class DoStream { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("张无忌"); list.add("周芷若"); list.add("赵敏"); list.add("张强"); list.add("张三丰"); list.stream() .filter(name->name.startsWith("张")) .filter(name->name.length()==3) .forEach(name-> System.out.println(name)); } }