Java Stream流指南:优雅处理集合数据

03-27 阅读 0评论

文章目录

  • 一、为什么要使用stream流呢?
  • 二、如何获取Stream流?
  • 三、Stream流的中间方法
  • 四、Stream流的终结方法
  • 总结

    一、为什么要使用stream流呢?

    想必我们在日常编程中,会经常进行数据的处理,我们先来看看没有stram流时,我们的操作方式,我们想要收集姓赵的学生姓名。

    Java Stream流指南:优雅处理集合数据,Java Stream流指南:优雅处理集合数据,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,方法,第1张
    (图片来源网络,侵删)
    public class StreamDemo {
        public static void main(String[] args) {
            ArrayList list = new ArrayList();
            Collections.addAll(list,"赵子龙","猪大肠","赵坤","张良","赵雯");
            ArrayList list1 = new ArrayList();
            list.forEach(s -> {
                if(s.startsWith("赵")) {
                    list1.add(s);
                }
            });
            list1.forEach(s -> System.out.println(s));
        }
    }
    

    Java Stream流指南:优雅处理集合数据

    这是我们在没有接触到Stream流时的操作方法,虽然使用lambda简化写法了,但还是不够优雅。

    下面我使用Stream流的方式来操作一下:

    public class StreamDemo {
        public static void main(String[] args) {
            ArrayList list = new ArrayList();
            Collections.addAll(list,"赵子龙","猪大肠","赵坤","张良","赵雯");
            list.stream().filter(s -> s.startsWith("赵")).forEach(s -> System.out.println(s));
        }
    }
    

    Java Stream流指南:优雅处理集合数据

    使用Stream流后的操作是不是比刚开始的操作要优雅许多,大家先不用管这块代码怎么写的,我会在下面一一讲解到。

    二、如何获取Stream流?

    我们可以简单理解Stream流就是一条流水线。

    Java Stream流指南:优雅处理集合数据

    Stream流的作用: 结合Lambda表达式,简化集合、数组的操作

    Stream流的使用步骤:

    1. 先得到一条Stream流(流水线),并把数据放上去
    2. 利用Stream流中的API进行各种操作(过滤、转换、统计、打印等)
    获取方式方法名说明
    单列集合default Stream stream()Collection中的默认方法
    双列集合无法直接使用stream流,需要先转为单列集合
    数组publis static Stream stream(T[] array)Arrays工具类中的静态方法
    零散数据public static Stream of(T… values)Stream接口中的静态方法

    单列集合:

    Java Stream流指南:优雅处理集合数据

    我们可以发现单列集合可以直接调用stream方法获取Stream流。

    Java Stream流指南:优雅处理集合数据

    我们使用下stream流的forEach方法,顾名思义就是打印方法。

    Java Stream流指南:优雅处理集合数据

    我们可以看到forEach方法的参数是一个函数式接口,所以我们可以使用lambda表达式简化,我们先写一下匿名内部类的写法:

    public static void main(String[] args) {
            ArrayList list = new ArrayList();
            Collections.addAll(list,"赵子龙","猪大肠","赵坤","张良","赵雯");
            Stream stream = list.stream();
            stream.forEach(new Consumer() {
                @Override
                public void accept(String s) {
                    System.out.println(s);
                }
            });
        }
    

    然后我们在使用lambda表达式对匿名内部类进行简化:

    public static void main(String[] args) {
            ArrayList list = new ArrayList();
            Collections.addAll(list,"赵子龙","猪大肠","赵坤","张良","赵雯");
            Stream stream = list.stream();
            stream.forEach(s -> System.out.println(s));
        }
    

    Java Stream流指南:优雅处理集合数据

    双列集合:

    双列集合是无法直接获取stream流的,所以我们需要先将双列集合转换为单列集合,再去进行流式操作。

    第一种方式,先将map转为Keyset:

    public static void main(String[] args) {
            Map map = new HashMap();
            map.put("四级",425);
            map.put("六级",425);
            map.put("考研",436);
            // 1.第一种获取stream流方式
            map.keySet().stream().forEach(s -> {
                System.out.println(s + ": " + map.get(s));
            });
        }
    

    第二种方式,转为EntrySet:

    // 2.第二种获取stream方式
            map.entrySet().stream().forEach(s -> System.out.println(s));
    

    Java Stream流指南:优雅处理集合数据

    数组:

    public static void main(String[] args) {
            int[] arr = {2,9,3,74,2,1};
            // 使用Arrays中的stream方法获取stream流
            Arrays.stream(arr).forEach(s -> System.out.println(s));
        }
    

    Java Stream流指南:优雅处理集合数据

    零散数据:

    零散数据使用Stream.of()方法获取stream流:

    public static void main(String[] args) {
            Stream.of(1,2,4,3,2,5).forEach(s -> System.out.println(s));
        }
    

    Java Stream流指南:优雅处理集合数据

    需要注意的坑:

    Java Stream流指南:优雅处理集合数据

    我们来看Stream.of()方法的参数是泛型可变参数,那证明可以接受数组数据,我们一起来试一下

    Java Stream流指南:优雅处理集合数据

    当我们传入的数据是引用数据类型的时候是可以正常操作的,我们再来试试基本数据类型的数组

    Java Stream流指南:优雅处理集合数据

    当我们传入基本数据类型时,发现打印的是地址,当我们使用Stream.of()方法传入基本数据类型的数组获取stream流时,是将整个数据当作一个元素的

    三、Stream流的中间方法

    方法作用
    Stream filter(Predicate

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]