收集Stream流

Stream流的收集操作

  • 收集Stream流的含义:就是把Stream流操作后的结果数据 转回集合 或者 数组 中去。
  • Stream流:方便操作 集合 / 数组 的 手段
  • 集合 / 数组:才是开发中的 目的

Stream流的收集方法

  • R collect(Collector  collector)
  • 开始收集Stream流,指定收集器
  • Object [ ]        toArray()
  • 返回包含此流元素的数组,这是一个终端操作。
  • 返回:一个数组,其运行时组件类型为Object,包含此流的元素
  • <A>    A [ ]  toArray(IntFunction<A [ ]  generator>)
  • 使用提供的生成器函数来分配返回的数组,以及分区执行或调整大小可能需要的任何其他数组,返回包含此流元素的数组
  • 这是一个终端操作
  • 参数:生成器——一个生成所需类型和提供长度的新数组的函数
  • 返回:包含此流中元素的数组
  • 抛出:ArrayStoreException——如果流中任何元素的运行时类型不能赋值给生成数组的运行时组件类型
  • API注意:生成器函数接受一个整数,即所需数组的大小,并生成所需大小的数组,这可以用一个数组构造函数引用来间接地表达:
  • default  List<T>   toList(){ return  (List<T>)Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray())))}
  • 将此流的元素累加到List中,列表中的元素将按照该流的相遇顺序(如果存在的话)排列,返回的 List不可修改 的;调用任何mutator方法总是会导致抛出UnsupportedOperationException,不能保证返回的 List 的实现类型或可序列化性。
  • 返回的实例可以基于值,调用者不应该对返回实例的身份做任何假设,对这些实例的身份敏感操作(引用相等性(==)、身份散列码 和 同步)是不可靠的,应该避免。这是一个终端操作。
  • 返回:包含流元素的List
  • API注意:如果需要对返回对象进行更多的控制,请使用Collectors.toCollection(Supplier)
  • 实施要求:这个接口的实现返回一个List,就像下面的操作一样 Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray())))
  • 实现注意:Stream的大多数实例将覆盖此方法,并提供与此接口中的实现相比高度优化的实现
  • 自JDK 16 起 

Collectors工具类提供了具体的收集方式

  • public  static<T>  Collector  toList()
  • 把元素收集到List集合中
  • public  static<T>  Collector  toSet()
  • 把元素收集到Set集合中
  • public static  Collector  toMap(Function keyMapper,Function  valueMapper)
  • 把元素收集到Map集合中

收集Stream流的作用?

  • Stream流是操作 集合 / 数组的手段
  • 操作的结果数据最终要恢复到集合或者数组中去
package com.csdn.streamcollect;import java.util.*;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class StreamCollectors {public static void main(String[] args) {List<String> list = new ArrayList<>();Collections.addAll(list, "张三丰", "张翠山", "张无忌", "赵敏", "周芷若");//        Stream<String> stringStream = list.stream().filter(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                return s.startsWith("张");
//            }
//        });Stream<String> stringStream = list.stream().filter(s -> s.startsWith("张"));List<String> collect = stringStream.collect(Collectors.toList());System.out.println(collect);//[张三丰, 张翠山, 张无忌]List<String> list1 = list.stream().toList();System.out.println(list1);//[张三丰, 张翠山, 张无忌, 赵敏, 周芷若]Stream<String> stringStream1 = list.stream().filter(s -> s.startsWith("张"));Set<String> collect1 = stringStream1.collect(Collectors.toSet());System.out.println(collect1);//[张翠山, 张三丰, 张无忌]Stream<String> stringStream2 = list.stream().filter(s -> s.startsWith("张"));
//        Object[] array = stringStream2.toArray();
//        System.out.println(Arrays.toString(array));//[张三丰, 张翠山, 张无忌]//        Stream.of(array).forEach(System.out::println);
//                                                                张三丰
//                                                                张翠山
//                                                                张无忌//        String[] array = stringStream2.toArray(new IntFunction<String[]>() {
//            @Override
//            public String[] apply(int value) {
//                return new String[value];
//            }
//        });String[] array = stringStream2.toArray(String[]::new);Stream.of(array).forEach(System.out::println);
//                                                                 张三丰
//                                                                 张翠山
//                                                                 张无忌}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/138916.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React create-react-app 里配置代理(解决跨域)

配置代理&#xff1a; creact-react-app v5 当然不是v5 下面的方法也适用。 方式一&#xff1a;package.json里配置 其实 cra里给了个简单的配置代理 就是在package.json里加上proxy就行了。 修改时需要 npm start重新运行一下&#xff0c;要不然可能不生效。 proxy只能以 h…

基于springboot实现酒店管理系统平台项目【项目源码+论文说明】计算机毕业设计

摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

LeetCode【74】搜索二维矩阵

题目&#xff1a; 代码&#xff1a; public static boolean searchMatrix(int[][] matrix, int target) {int rows matrix.length;int columns matrix[0].length;// 先找到行&#xff0c;行为当前行第一列<target&#xff0c;当前行1行&#xff0c;第一列>targetfor…

BIM如何通过3D开发工具HOOPS实现WEB轻量化?

随着建筑行业的数字化转型和信息建模技术的不断发展&#xff0c;建筑信息模型&#xff08;BIM&#xff09;已经成为设计、建造和管理建筑项目的标准。然而&#xff0c;BIM模型通常包含大量的数据&#xff0c;导致在Web上的传输和查看效率低下。为了解决这一挑战&#xff0c;HOO…

第9期ThreadX视频教程:自制个微秒分辨率任务调度实现方案(2023-10-11)

视频教程汇总帖&#xff1a;【学以致用&#xff0c;授人以渔】2023视频教程汇总&#xff0c;DSP第12期&#xff0c;ThreadX第9期&#xff0c;BSP驱动第26期&#xff0c;USB实战第5期&#xff0c;GUI实战第3期&#xff08;2023-10-11&#xff09; - STM32F429 - 硬汉嵌入式论坛 …

【LeetCode: 137. 只出现一次的数字 II | 位运算 | 哈希表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

数字签名 及 数字证书 原理笔记

这里是对 数字签名 及 数字证书 原理该视频做的一个笔记&#xff0c;链接 前言 如果对一些加密算法不懂可以参考这篇文章 数字签名 小明发送文件给小红时对文件做出签名 将文件进行hash算法加密得到hash值&#xff0c;并且对该hash值使用私钥进行加密&#xff08;私钥加密的…

汉得欧洲x甄知科技 | 携手共拓全球化布局,助力出海中企数智化发展

HAND Europe 荣幸获得华为云颁发的 GrowCloud 合作伙伴奖项&#xff0c;进一步巩固了其在企业数字化领域的重要地位。于 2023 年 10 月 5 日&#xff0c;HAND Europe 参加了华为云荷比卢峰会&#xff0c;并因其在全球拓展方面的杰出贡献而荣获 GrowCloud 合作伙伴奖项的认可。 …

【触想智能】工业级触摸显示器的分类与应用分享

工业级触摸显示器是具有触摸功能的工业显示器&#xff0c;常见的触摸方式有电容触摸和电阻触摸。它是应用在工业上的设备&#xff0c;和普通的显示器有着很大的区别。 工业级触摸显示器由液晶触摸屏、功能主板、外壳三部分组成&#xff0c;结构用料一般都采用铝合金材质&#x…

MySQL——七、MySQL备份恢复

MySQL 一、MySQL日志管理1、MySQL日志类型2、错误日志3、通用查询日志4、慢查询日志5、二进制日志5.1 开启日志5.2 二进制日志的管理5.3 日志查看5.4 二进制日志还原数据 二、MySQL备份1、备份类型逻辑备份优缺点 2、备份内容3、备份工具3.1 MySQL自带的备份工具3.2 文件系统备…

通过核密度分析工具建模,基于arcgis js api 4.27 加载gp服务

一、通过arcmap10.2建模&#xff0c;其中包含三个参数 注意input属性&#xff0c;选择数据类型为要素类&#xff1a; 二、建模之后&#xff0c;加载数据&#xff0c;执行模型&#xff0c;无错误的话&#xff0c;找到执行结果&#xff0c;进行发布gp服务 注意&#xff0c;发布g…

视频Logo添加实战:批量处理视频的技巧

在今天的教程中&#xff0c;我们将向大家介绍一种在视频上添加Logo的快捷方法。无论你是自媒体作者、视频编辑还是其他需要处理视频的从业人员&#xff0c;这个方法都将为你节省大量时间和精力。让我们一起学习如何使用固乔剪辑助手来实现这个任务。 首先&#xff0c;我们需要打…