首页 > 编程语言 >Java8 提供的流式操作

Java8 提供的流式操作

时间:2022-09-24 22:44:45浏览次数:83  
标签:返回 flatMap Stream students 元素 流式 result 操作 Java8

目录

参考资料

流式操作

1. java.util.stream.Stream 接口

Stream 代表一个支持串行或并行聚集操作的元素序列。

1.1 Stream 提供的方法

  • filter
    filter 生成一个新的 Stream,该 Stream 所有元素都满足 predicate.test = true 。
  • map
    map 根据 function 对所有元素进行计算,并返回一个 function 返回结果类型的 Stream。
  • flatMap
// flatMap 的入参是一个函数(入参类型为T,结果为 Stream的映射函数),返回一个元素类型为 R 的 Stream,flatMap 是个中间操作。
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
  • distinct()
    distinct 依据 Object.equals(Object) 对 Stream 的所有元素去重,返回去重后的 Stream
  • sorted
    sorted 对 Stream 所有元素按照自然顺序排序。还提供了重载方法支持传入一个比较器,用于排序。
  • peek
    peek 将 Stream 的元素送给 Consumer 消费使用,比如打印当前元素信息。

该方法主要用于 debug。

  • limit
    limit 限制Stream中元素数量。

limit 在串行流代价低廉,在并行流代价昂贵。

Stream<T> limit(long maxSize)
  • skip
    skip 跳过几个元素

skip 在串行流代价低廉,在并行流代价昂贵。

  • forEach
    forEach 轮询遍历 Stream 的元素,将元素送给 Consumer 消费使用。

  • toArray()
    转为数组。

  • reduce
    reduce 对 Stream 的所有元素,进行二元运算返回总结果。

// identity 恒值,accumulator 二元运算符
T reduce(T identity,
         BinaryOperator<T> accumulator)

相当于:

T result = identity;
     for (T element : this stream)
         result = accumulator.apply(result, element)
     return result;
  • collect
    collect 用于收集Stream中的元素,将每个元素收集到 R 中。
// supplier 用于创建返回结果类型的实例
// accumulator 将 Stream 的元素和supplier创建的实例进行计算
// combiner 将每个实例进行合并
<R> R collect(Supplier<R> supplier,
              BiConsumer<R,? super T> accumulator,
              BiConsumer<R,R> combiner)

相当于:

R result = supplier.get();
     for (T element : this stream)
         accumulator.accept(result, element);
     return result;

例子:

Stream<String> stringStream = Stream.of("1","2","3","4","5");
ArrayList list = stringStream.collect(ArrayList::new,ArrayList::add,ArrayList::addAll);
System.out.println(list.toString());
  • min
    返回 Stream 中最小元素。

  • max
    返回 Stream 中最大元素。

  • count
    Stream 中元素数量

  • anyMatch
    Stream 如果任一元素满足 Predicate 则返回 true。

  • allMatch
    Stream 如果全部元素满足 Predicate 则返回 true。

  • noneMatch
    Stream 如果全部元素都不满足 Predicate 则返回 true。

  • findFirst
    返回 Stream 的第一个元素

  • findAny()
    返回任一一个元素

  • iterator()
    继承自 BaseStream。

  • spliterator
    继承自 BaseStream。

  • isParallel
    是否是并行流

  • sequential
    返回串行流

  • parallel
    返回并行流

2.Collection 的流式操作

List<String> students = new ArrayList<>();
        students.add("小明");
        students.add("大薛");
        students.add("小白");
        students.add("大强");
        students.add("小胖");
        System.out.println(students.stream().toString());
        System.out.println("======= filter ======");
        List<String> bigStudents = students.stream().filter((student)->{
            if(student.contains("大"))
                return true;
            return false;
        }).collect(Collectors.toList());
        System.out.println(bigStudents.toString());
        System.out.println("======= flatMap ======");
        students.stream().flatMap((student)->{
             Map<String , String > studentFee = new HashMap<>();
             studentFee.put(student,"100元");
            return  Stream.of(studentFee);
        }).forEach((studentFee)->{
            System.out.println(studentFee.toString());
        });

结果:

======= filter ======
[大薛, 大强]
======= flatMap ======
{小明=100元}
{大薛=100元}
{小白=100元}
{大强=100元}
{小胖=100元}

标签:返回,flatMap,Stream,students,元素,流式,result,操作,Java8
From: https://www.cnblogs.com/lihw-study/p/16725468.html

相关文章

  • Vim常用操作
    目录基本概念编辑浏览命令行模式总结基本概念vim有三种工作模式:一般模式:vimfile之后就进入了一般模式编辑模式:一般模式下按i、a、o等,按Esc返回一般模式修改文件的......
  • 隐藏若依框架侧边栏、导航栏、右上角操作按钮,实现全屏显示
    1.隐藏侧边栏、导航栏    将上图所注释掉的代码注释即可隐藏侧边栏、导航栏。2.隐藏右上角操作按钮,   将上图所注释掉的代码注释即可隐藏右上方图案。......
  • SQLYOG基本命令行操作
    DOS窗口: 连接数据库:命令行连接:mysql-uroot-p刷新权限:flushprivileges查看所有的数据库:showdatabases;切换数据库:use数据库名查看数据库中所有的表:......
  • TypeScript Array数组 生成两个数组的交集,并且在数组中进行删除操作
    TypeScriptArray数组 生成两个数组的交集,并且在数组中进行删除操作 /***@methodcutArr删除数组1中,与数组2重复的数据*Arr([1,2,3,5],[2,3,4])=>[1,5......
  • mysql 更换root密码简单操作
    usemysql;--切换数据库--更新密码updateusersetauthentication_string=password('123456')whereuser='root'; --刷新权限等信息flushprivileges; 执行......
  • 操作系统内核
    内核作为硬件资源和软件资源的管理者,其内部组成在逻辑上大致如下:1.管理CPU,由于CPU是执行程序的,而内核把运行时的程序抽象成进程,所以又称为进程管理。2.管理内存,由于程......
  • HBase对表增查操作 API
    publicclassHBaseDML{//静态属性publicstaticConnectionconn=HBaseConnection2.conn;//添加数据publicvoidputCell(Contractcontract){......
  • Java8提供的函数接口
    目录参考资料函数接口1.Function<T,R>2.Predicate3.Supplier4.UnaryOperator参考资料https://docs.oracle.com/javase/8/docs/api/函数接口Java提供的函数接口......
  • 操作crontab
    添加指定crontabct_list="/tmp/crontab.list"crontab-l>$ct_listcp$ct_list$ct_list.baktagent_ct=`grep-c"fatal_monitor.sh"$ct_list`if[$tagent_ct-eq......
  • 吃透JAVA的Stream流操作,多年实践总结
    在JAVA中,涉及到对数组、Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理。例如,现在有这么一个需求:从给定句子......