stream常用操作

news/2024/12/2 13:49:24/文章来源:https://www.cnblogs.com/qtfwax/p/18581763

Java Stream对象转换为Map

方法1:通过收集器(Collector)使用toMap()方法

Map<KeyType, ValueType> map = stream.collect(Collectors.toMap(obj -> obj.getFieldKey(), obj -> obj.getFieldValue()));

方法2:结合Collectors的toMap()方法和Function.identity(),使用对象自身作为key

Map<Object, ObjectType> map = stream.collect(Collectors.toMap(ObjectType::getFieldKey, Function.identity()));

方法3:如果存在重复的key,可以使用BinaryOperator来指定如何处理冲突的值

Map<KeyType, ValueType> map = stream.collect(Collectors.toMap(ObjectType::getFieldKey, ObjectType::getFieldValue, (value1, value2) -> value1));

方法4:使用Collectors的toMap()方法和Collectors.groupingBy()方法结合,将stream按照某个属性分组后转换为Map

Map<GroupKeyType, Map<KeyType, ValueType>> map = stream.collect(Collectors.groupingBy(ObjectType::getGroupKey, Collectors.toMap(ObjectType::getFieldKey, ObjectType::getFieldValue)));

方法5:使用Collectors的toMap()方法和Collectors.groupingBy()方法结合,将stream按照某个属性分组并汇总为List后转换为Map

Map<GroupKeyType, List<ObjectType>> map = stream.collect(Collectors.groupingBy(ObjectType::getGroupKey, Collectors.toList()));

map 方法用于映射每个元素到对应的结果

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

filter 方法用于通过设置的条件过滤出元素

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
long count = strings.stream().filter(string -> string.isEmpty()).count();

limit 方法用于获取指定数量的流

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

sorted 方法用于对流进行排序

Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

parallelStream 是流并行处理程序的代替方法

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
long count = strings.parallelStream().filter(string -> string.isEmpty()).count();

Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());System.out.println("筛选列表: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("合并字符串: " + mergedString);

  

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

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

相关文章

也许,这就是一个新的开始吧……

准备参加招警考试了,虽然我预测当前自己的各项指标什么的基本不合格,但是我愿意尝试一把,愿上岸成功。加油吧,青中骚年。 【敬畏能量 敬畏自然】

开源工具能让项目管理更高效?2024年开源管理软件大揭秘!

一、开源项目管理的重要性在当今的项目管理领域,开源项目管理具有至关重要的意义。它鼓励创新,为开发者提供了一个开放的平台,让不同背景的人能够共同参与,分享各自的想法和经验,从而推动项目不断创新发展。 开源项目管理保证透明,项目的代码和流程对所有人可见,这使得项…

Vaccine

Vaccine 1. 扫描 上来直接扫到ftp有一个backup.zip以及ssh和80端口将backup.zip下载下来然后发现压缩包有密码2. 访问 访问80端口看看还有一些信息,apache+PHP,Linux系统首先,对于登录界面,先排除弱口令和SQL注入,然后看目录扫描结果没什么内容,那只能回头看backup.zip,…

十、Spring Boot集成Spring Security之HTTP请求授权

Spring Security最新基于HTTP请求授权配置详解:工作原理,授权配置,异常处理,测试接口,案例源码目录前言一、HTTP请求授权工作原理二、HTTP请求授权配置1、添加用户权限2、配置ExceptionTranslationFilter自定义异常处理器3、HTTP请求授权配置三、测试接口1、测试类2、测试…

博客园主页皮肤设置 - 第三版

基本设置侧边栏 <script type="text/javascript">window.cnblogsConfig = {info: {name: A-刘晨阳, // 用户名startDate: 2021-10-14, // 入园时间,年-月-日。入园时间查看方法:鼠标停留园龄时间上,会显示入园时间avatar: https://img2024.cnblogs.com/blog…

11.27实验 25:访问者模式

[实验任务一]:打包员 在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。 实验要求: 1. 画出对应的类图;2. 提交源代码; #include <iostream> #include <string> #include <list> using namespace std;class Prod…

11.29实验二:逻辑回归算法实现与测试

实验二:逻辑回归算法实现与测试 一、实验目的 深入理解对数几率回归(即逻辑回归的)的算法原理,能够使用 Python 语言实现对数 几率回归的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。二、实验内容 (1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出…

11.25实验 23:策略模式

[实验任务一]:旅行方式的选择 旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式。 实验要求: 1. 画出对应的类图;2. 提交源代码; package strategy;public class Person {private Tour…

vxe-table 设置斑马线条纹样式

vxe-table 设置斑马线条纹样式,通过设置 stripe 参数 官网:https://vxetable.cn 表格<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div> </template><script> export default {data () {const gridOpti…

Lsky Pro挂载alist

首先需要去修改lsky代码,如果是docker可以 docker exec -it lsky-pro /bin/bash 然后安装个vim apt install vim cd app cd Services/ ls vi ImageService.php 然后vim输入 :set nu 显示行号,然后找到345行,粘贴进去 authType => 1, lwebdav存储策略问题 Issue #497 ls…

使用Go语言开发的一款轻量级可视化服务器监控监控软件

大家好,我是兔兔,兔兔答题的开发者。兔兔答题是一款简单、易用的答题系统,可应用于微信考试、付费考试、社会调查问卷、明星知识问答、员工培训考核、模拟自测、企业面试、试题库等多种场景。兔兔答题官网文档 进入给大家分享的内容是一款轻量级的日志可视化图形工具。在兔兔…