使用传统的方式遍历集合对集合中的数据进行过滤和使用Stream流的方式遍历集合对集合中的数据进行过滤

使用传统的方式,遍历集合,对集合中的数据进行过滤

class Test{
    public static void main(String[] args){
        ArrayList<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");

        //对list集合中的元素进行过滤,只要张字开头的元素,存储到一个新的集合中
        ArrayList<String> listA = new ArrayList<>();
        for (String name : list) {
            if (name.startsWith("张")){
                listA.add(name);
            }
        }

        //对listA进行过滤,只要姓名长度为3的
        ArrayList<String> listB = new ArrayList<>();
        for (String name : listA) {
            if (name.length() == 3){
                listB.add(name);
            }
        }
		//遍历listB集合
        for (String name : listB) {
            System.out.println(name);
        }
    }
}

这段代码中含有三个循环,每一个作用不同
1.首先筛选所有姓张的人;
2.然后筛选名字有三个字的人;
3.最后进行对结果打印输出
没到那个我们需要对集合中的元素进行操作的时候,总是要进行循环、循环、再循环。这是理所当然的么?不是。循环是我们做事的方式,而不是目的,另一方面,使用线性循环就意味着只能遍历一次。如果希望再次遍历,只能再使用另一个循环从头开始

那,Lambda的衍生物Stream能给我们带来怎样更加优雅的写法呢?

Stream流的方式遍历集合对集合中的数据进行过滤

package com.yang.Test.StreamStudy;

import java.util.ArrayList;

public class StreamStudy01 {
    public static void main(String[] args) {


    }
}

/**
 * 使用Stream流的方式,遍历集合,对集合中的数据进行过滤
 * Stream流是JDK1.8之后出现的
 * 关注的是做什么,而不是怎么做
 */
class Test{
    public static void main(String[] args) {
        //创建一个List集合,存储姓名
        ArrayList<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");

        //对list集合中的元素进行过滤,只要张字开头的元素,存储到一个新的集合中
        //对listA进行过滤,只要姓名长度为3的,存放到一个新集合中
        //对listB集合进行遍历
        list.stream().filter(name->name.startsWith("张"))
                .filter(name->name.length()==3)
                .forEach(name-> System.out.println(name));
        ;

    }
}
posted @ 2022-07-21 10:03  我滴妈老弟  阅读(153)  评论(0编辑  收藏  举报