Java8新特性—Stream

导读:本篇文章讲解 Java8新特性—Stream,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Stream简介

Stream允许我们以声明式的方式处理数据集合,可以将Stream看作是遍历数据集合的高级迭代器。Stream 与Lambda表达式结合使用,将使编码效率大大提高,可读性增强。

注意:Stream与IO中的InputStream/OutputStream是不同的概念

操作案例:在这里插入图片描述使用stream将集合中的手机按照序号num从小到大排序:
在这里插入图片描述
结果:
在这里插入图片描述
Stream流的操作顺序

在这里插入图片描述
Stream语法

| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|

Stream用法

获取流

  1. Collection接口下的stream()获取流

在这里插入图片描述

List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
  1. 使用 Arrays 中的 stream() 方法,将数组转成流

在这里插入图片描述

Integer[] arr= new Integer[10]; 
Stream<Integer> stream = Arrays.stream(arr);
  1. 使用 Stream 中的静态方法:of()

在这里插入图片描述

Stream<Integer> stream = Stream.of(4,3,2,7,5,1,6);
  1. 使用 BufferedReader.lines() 方法,将每行内容转成流

在这里插入图片描述

BufferedReader reader=new BufferedReader(new FileReader("test.txt")); 
Stream<String> lineStream = reader.lines();

流操作

流操作可以分为中间操作终端操作

List<Apple> apples = 
			applestore .stream() 获得流
			 		   .filter(a -> a.getColor().equals("红色")) 中间操作
			 		   .collect(Collectors.toList()); 终端操作

简单来说Stream的流程就是
数据源->中间操作->终端操作->结果

中间操作

  • filter():过滤流中的某些元素
  • sorted():自然排序,流中元素需实现Comparable接口
  • distinct():去除重复元素
  • limit(n):获取n个元素
  • skip(n):跳过n个元素,配合limit(n)可实现分页
  • map():将其映射为一个新的元素
    在这里插入图片描述
    在这里插入图片描述
    map():
  1. 对集合中的每一个元素求平方
    在这里插入图片描述
    在这里插入图片描述
    2.使用map()将String型的整数转为Integer型的整数
    在这里插入图片描述
    在这里插入图片描述

终端操作

  • forEach():遍历流中的元素
  • toArray():将流中的元素倒入一个数组中
  • Min():返回流中元素的最小值
  • Max():返回流中元素的最大值
  • count():返回流中元素的总个数
  • reduce():所有元素求和
  • anyMatch():接收一个Predicate函数,只要流中有一个元素满足条件则返回true,否则返回false
  • allMatch():接收一个Predicate函数,当流中所有元素都符合条件时才返回true,否则返回false
  • findFirst():返回流中的第一个元素
  • collect():将流中的元素倒入一个集合(Collection/Map)
/**
         * 终端操作 -- 结果
         */
        Integer[] arr = new Integer[]{3,1,5,7,2,6,4,4,0};
        Object[] arr1 =  Arrays.stream(arr)
                .distinct()
                .sorted()
                .toArray();        //toArray()将流中元素倒入Object数组中
        //forEach()
        Arrays.stream(arr1).forEach(e-> System.out.print(e+" "));
        //count 统计
        Long count = Arrays.stream(arr).count();
        System.out.println(count);
        //anyMatch 流中任意一个元素符合条件时返回true
        boolean any = Arrays.stream(arr).anyMatch((e)->{return e>3;});
        System.out.println("有1个元素>3 :"+any);
        //anyMatch 流中所有元素符合条件时返回true
        boolean all = Arrays.stream(arr).allMatch((e)->{return e>3;});
        System.out.println("所有元素>3 :"+all);
        //findFirst 返回流中第一个元素
        System.out.println("流中第一个元素 :"+Arrays.stream(arr).findFirst());
        //reduce:所有元素求和
        Optional<Integer> res = Arrays.stream(arr).reduce((a, b)->a+b);
        System.out.println("元素求和 :"+res);

在这里插入图片描述
关于Optional类:https://blog.csdn.net/lanleihhh/article/details/123097262

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/15600.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!