使用传统的方式遍历集合,对集合中的数据进行过滤和使用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));
    }
}

 

posted @ 2022-07-20 17:38  魔光领域  阅读(81)  评论(0编辑  收藏  举报