Stream流-传统集合的多步变量代码和使用Stream流方式进行过滤

Stream流

说的Stream便容易想到I/O Stream 而实际上 谁规定“流”就一定是Io流呢?在java8中 得益于Lambda所带来的函数式编程 引入了一个全新的Stream概念 用于解决已有集合类库既有的弊端

传统集合的多步变量代码

几乎所有的集合 (如Collection接口或Map接口等)都支持直接或间接的遍历操作 而当我们需要对集合中的元素进行操作的时候 除了必需的添加、删除、获取外 最经典的就是集合遍历

代码:

复制代码
public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        for (String s : list) {
            System.out.println(s);
        }
    }
复制代码

这是一段非常简单的集合遍历操作:对集合中的每一个字符串都进行打印输出操作

循环变量的弊端

java 8的Lambda让我们可以更加专注于做什么 而不是怎么做 这点此前已经结合内部类进行了对比说明 现在 我们仔细体会一下代码 可以看到:

  • for循环的语法就是“怎么做”
  • for循环的循环体才是“做什么”

要进行遍历 但是是遍历的唯一方式吗 遍历是指每一个元素逐一进行处理 而并不是从第一个到最后一个顺次处理的循环 前者是目的 后者是方式

试想一下 如果希望对集合中的元素进行筛选过滤:

1.将集合A根据条件一过滤为子集B

2.然后再根据条件二过滤为子集C

使用Stream流的方式进行过滤

使用Stream流的方式 遍历集合 对集合中的数据进行过滤Stream流是JDK1.8之后出现的关注的是做什么 而不是怎么做

复制代码
public class BStream {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周伟");
        list.add("赵梅");
        list.add("张强");
        list.add("张三丰");
        /*
            对list集合中的元素进行过滤 只要以张开头的元素 存储到一个新的集合中
            对list集合进行过滤 只要姓名长度为3的人 存储到一个新的集合中
            遍历listB集合
        */
        list.stream().filter(name->name.startsWith("张"))
                .filter(name->name.length()==3)
                .forEach(name->System.out.println(name));
    }
}
复制代码

 

posted @   monkey大佬  阅读(255)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示