Stream实现List和Map互转总结

2023-11-20

本文来说下Stream实现List和Map互转总结


实体类

本篇介绍Stream流List和Map互转,同时在转换过程中遇到的问题分析。

package cn.wideth.collect;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Integer id;

    private String name;

}

Map转List代码

Map转List代码

package cn.wideth.collect;

import lombok.extern.slf4j.Slf4j;

import java.util.*;
import java.util.stream.Collectors;

@Slf4j
public class StreamMapToList {

    /**
     * 数据初始化
     */
    private static final Map<Integer, String> mapToList;
    static
    {
        mapToList = new HashMap<Integer, String>();

        mapToList.put(10088, "ccc");
        mapToList.put(10086, "aaa");
        mapToList.put(10087, "bbb");

    }



    public static void main(String[] args) {

        List<User> userList = defaultOrder();
        System.out.println(userList);
        List<User> userList2and = orderByKeyMethodOne();
        System.out.println(userList2and);
        List<User> userList3and = orderByKeyMethodTwo();
        System.out.println(userList3and);

        List<User> userList4and = reverseOrderByKey();
        System.out.println(userList4and);
        List<User> userList5and = orderByValue();
        System.out.println(userList5and);
        List<User> userList6and = reverseOrderByValue();
        System.out.println(userList6and);

    }

    /**
     *根据value倒序排序
     */
    public static List<User> reverseOrderByValue(){
        List<User> userList = mapToList.entrySet().stream().sorted(Collections.reverseOrder(Map.Entry.comparingByValue())).
                map(a -> new User(a.getKey(),a.getValue())).collect(Collectors.toList());
        return userList;
    }



    /**
     * 根据value排序
     */
    public static List<User> orderByValue(){
        List<User> userList = mapToList.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue)).
                map(a -> new User(a.getKey(), a.getValue())).collect(Collectors.toList());
        return userList;
    }



    /**
     *根据key倒序排序
     */
    public static List<User> reverseOrderByKey(){
        List<User> userList = mapToList.entrySet().stream().sorted(Map.Entry.comparingByKey(Comparator.reverseOrder())).
                map(a -> new User(a.getKey(),a.getValue())).collect(Collectors.toList());
        return userList;
    }



    /**
     *根据key排序,方法2
     */
    public static List<User> orderByKeyMethodTwo(){
        List<User> userList = mapToList.entrySet().stream().sorted(Map.Entry.comparingByKey()).
                map(a -> new User(a.getKey(),a.getValue())).collect(Collectors.toList());
        return userList;
    }



    /**
     *根据key排序,方法1
     */
    private static List<User> orderByKeyMethodOne() {

        List<User> userList = mapToList.entrySet().stream().sorted(Comparator.comparing(a -> a.getKey())).
                map(a -> new User(a.getKey(),a.getValue())).collect(Collectors.toList());
        return userList;

    }

    /**
     * 按照默认顺序
     */
    private static List<User> defaultOrder() {


        List<User> userList = mapToList.entrySet().stream().map(a -> new User(a.getKey(), a.getValue())).
                collect(Collectors.toList());
        return userList;

    }
}

测试结果

在这里插入图片描述


List转Map代码

List转Map

package cn.wideth.collect;

import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

@Slf4j
public class StreamListToMap {

    private static final List<User> userList;
    static
    {
        userList = Arrays.asList(
                new User(1003,"keko"),
                new User(1001,"jeek"),
                new User(1002,"mack")
        );
    }

    public static void main(String[] args) {

        Map<Integer, String> listToMap1 = method01();
        System.out.println(listToMap1);

        Map<Integer, User> listToMap2 = method02();
        System.out.println(listToMap2);

        Map<Integer, User> listToMap3 = method03();
        System.out.println(listToMap3);

        Map<Integer, User> listToMap4 = method04();
        System.out.println(listToMap4);
    }

    /**
     * 指定key-value,value是对象中的某个属性值
     */
    public static Map<Integer,String> method01(){
        Map<Integer, String> userMap = userList.stream().collect(Collectors.
                toMap(User::getId, User::getName));
        return userMap;
    }

    /**
     *指定key-value,value是对象本身,User->User 是一个返回本身的lambda表达式
     */
    public static Map<Integer,User> method02(){
        Map<Integer, User> userMap = userList.stream().collect(Collectors.
                toMap(User::getId, User->User));
        return userMap;
    }

    /**
     * 指定key-value,value是对象本身,Function.identity()是简洁写法,也是返回对象本身
     */
    public static Map<Integer,User> method03(){
        Map<Integer, User> userMap = userList.stream().collect(Collectors.
                toMap(User::getId, Function.identity()));
        return userMap;
    }

    /**
     * 指定key-value,key 冲突的解决办法
     * (key1,key2)->key2:第二个key覆盖第一个key
     * (key1,key2)->key1:保留第一个key
     */
    public static Map<Integer,User> method04(){
        Map<Integer, User> userMap = userList.stream().collect(Collectors.
                toMap(User::getId, Function.identity(),(key1,key2)->key2));
        return userMap;
    }



}

测试结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Stream实现List和Map互转总结 的相关文章

  • 如何将列表列表写入 CSV 文件 Python?

    我有一个列表 例如 a b c d e f 我想将其写入 CSV 文件 如下所示 a b c d e f 我怎么做 我尝试过使用 csv writerows 但输出文件的每个字符位于不同的单元格中 并且全部位于同一行中 从某种意义上说 第一
  • 当我启动 Windows 命令提示符时,我做了什么导致环境变量发生更改?

    我使用的是 Windows 10 x64 我安装了 Anaconda3 如果我启动 C Windows system32 cmd exe 时没有运行任何其他内容 并且在我可以看到的后台中没有任何有趣的内容 则以下内容将添加到控制面板 UI
  • 找到不固定长度的数字的所有可能排列以达到给定的总和或乘积

    使用普通 Python 或任何 Python 库 您将如何查找列表中元素的所有可能组合l等于给定值val using addition 减法 or 乘法 假设列表的长度并不总是相同 假设列表中的每个元素在每个组合中只能使用一次 并假设没有使
  • ntdll!kifastsystemcallret

    我的程序在执行结束时崩溃 甚至看不到堆栈展开信息 我只能看到这个 ntdll kifastsystemcallret 有人能提供一些线索吗 KiFastSystemCallRet 意味着线程处于系统调用中 x86 NT 系统调用调度的一个不
  • 如何迭代所有注册表项?

    我正在尝试迭代所有注册表项以查找 包含 并删除 jre1 5 0 14 值 有办法做到吗 下面的代码只是在特定键下找到jre1 5 0 14 我确实想迭代所有的键 顺便说一句 if 子句获取是否等于 jre1 5 0 14 但如果它包含 j
  • 如何在Java 8中实现Elvis运算符?

    我有一个经典的 Elvis 运算符 案例 其中我调用每个可能返回 null 的方法并将它们链接在一起 thing nullableMethod1 a nullableMethod2 b nullableMethod3 在 Java 8 中
  • 使用 FIND 命令进行并集、交集和排除?

    我需要使用 find 命令管理列表 假设列表在非不同列表中具有随机名称 即它们的交集不是空集 我能怎么做 A B 查找列表A中除列表B中的文件之外的文件 A 路口 B 查找列表 A 和 B 共有的文件 请咨询here https stack
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • 如何使用正则表达式验证带有可选百分比符号的小数?

    正如问题的标题 我需要使用以下值验证正则表达式 最多 2 个小数位和 9 个整数 带有可选的百分比符号 Valid 10 0 1111111 12 15 2 10 2 3 Invalid 12 02 123456789123 123 I t
  • Windows 上最快的屏幕捕获方法

    我想为Windows平台编写一个截屏程序 但不确定如何捕获屏幕 我知道的唯一方法是使用 GDI 但我很好奇是否还有其他方法可以实现此目的 如果有的话 哪种方法产生的开销最小 速度是首要任务 截屏程序将用于录制游戏镜头 不过 如果这确实缩小了
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 无法访问127.0.0.1

    我不知道这种情况何时开始发生 但结果是 127 0 0 1 无法在任何地方的任何端口上工作 例如 浏览器显示无法连接 以下是我的研究结果 localhost COMPUTER NAME 和实际 IP 地址都工作正常 我的主机文件中没有什么特
  • Java Stream 相当于 ReactiveX Observable#scan

    ReactiveX 有一个非常简洁的运算符 称为Scan http reactivex io documentation operators scan html 这类似于reduce 只不过它发出每个中间累加器 我如何使用 Java Str
  • py2exe - 没有系统模块“pywintypes”

    我正在尝试将一个简单的 Python 脚本转换为 Windows 可执行文件 我的 setup py 脚本是 from distutils core import setup import py2exe setup name Simple
  • pyinstaller错误:OSError:[WinError 6]句柄无效

    该文件使用终端命令获取 wifi 密码netsh wlan show profiles我之前使用 pyinstaller 创建了一些 exe 它们工作得很好 代码 import subprocess import time import s
  • Nashorn JSON.parse() - java.lang.OutOfMemoryError:Java 堆空间 - JDK8u60

    Nashron 发行说明声称他们修复了 JSON 解析器错误 但我仍然能够在新补丁 8u60 上产生 不同的 错误 这次是OutOfMemoryError 请参阅随附的 JSON 1 通常是类别和子类别关系 当我尝试调用 JSON pars
  • 使用 Java 检索 Window 进程的 CPU 使用率

    我正在寻找一个 Java 解决方案来查找 Windows 中正在运行的进程的 CPU 使用情况 查了一下网上 关于Java解决方案的信息似乎很少 请记住 我并不是要查找 JVM 的 CPU 使用情况 而是要查找当时在 Windows 中运行
  • 字典中的列表,Python 中的循环

    我有以下代码 TYPES hotmail type hotmail lookup mixed dkim no signatures S Return Path email protected cdn cgi l email protecti
  • 如何检查列表是否为空?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 例如 如果通过以下内容 a 我如何检查是否a是空的 if not a print Lis
  • 调整 CMD 窗口大小

    如何在 C 或 C 中以编程方式调整命令提示符窗口的大小 例如 80x25 或 80x40 字符 先感谢您 SetConsoleWindowInfo http msdn microsoft com en us library ms68612

随机推荐

  • EXCEL导出封装 C#

    public class ExportToExcel public void Export List
  • flutter 一个Widget布局只return一次,但是可以有叠加覆盖的思想

    首先一个Widget只会return一次 但是如果有多个情况 多个判断 通过不同情况返回不同布局 就可以通过叠加的方式 下一个布局会替换掉上一个布局 messageTypeView Container 保底防止报错 文字 case 1 me
  • STM32串口通信详解

    作者简介 嵌入式入坑者 与大家一起加油 希望文章能够帮助各位 个人主页 rivencode的个人主页 系列专栏 玩转STM32 保持学习 保持热爱 认真分享 一起进步 目录 一 数据通信方式 1 串行与并行通信 2 全双工 半双工及单工通讯
  • 采用update-alternatives 切换python版本

    update alternatives是Debian提供的一个工具 非Debian系的就不用看了 原理类似于上面一个办法 也是通过链接的方式 但是其切换的过程非常方便 首先看一下update alternatives的帮助信息 update
  • [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL s...

    Err 1064 You have an error in your SQL syntax check the manual that corresponds to your MySQL server version for the rig
  • kpca故障诊断matlab,关于用KPCA做故障检测,请教SPE控制图应该怎么做

    function qn kpca dtrain kernel q Fa Ca KPCA 核主成分分析 使用 trainFeat bj kpca data kernel p1 p2 输入 data 原始数据文件名 kernel 核函数 p1
  • eclipse导入外部项目后出现红叉解决方法

    eclipse开发工具中 在导入java项目时 有时会出现红叉 的现象 并且会发现里面的程序仍然能正常运行 原因 因为每个电脑上eclipse的环境都不太一样 导入项目后才回有红叉 这时只需要该变一下这个项目的环境就可以了 解决方法 第一步
  • nrm 切换 npm 源

    npm 配置仓库 查看当前仓库配置 npm config list 查看配置 npm config ls l 查看详细配置 可以看到 registry 配置 就是仓库地址 简述修改配置的 3 种方式 1 通过 config 配置 npm c
  • cesium for ue->CesiumUtility

    该模块共18个文件 3152行 含注释 截至2022年11月9日 剩下13个文件 1443行
  • 贝叶斯相关公式(Bayes)

    这里只是记录一下 非常推荐马同学高等数学 文末有原文 点击这里看里面的例一应该是理解贝叶斯公式最好的例子 如果你稍微有一些基础 我觉得文末第二个链接中的例一更加适合你 代数推导 1 贝叶斯公式 是根据条件概率推导的 P A B P AB P
  • 基于ssm+ajax实现的多条件带省略号分页

    ssm ajax layui实现的多条件分页源码 案列种包含数据库和前后台完整源码 演示地址 ssm ajax实现的多条件分页源码 前台核心代码 layui use form function var form layui form for
  • 一些论文审稿方面的体会

    本人小硕在读 老师也让帮忙审了论文 多是与自己领域相关的 老师让多学习学习 每次审论文都感觉诚惶诚恐 要是提的问题太多吧 感觉万一给拒了作者该多伤心啊 这挑的问题少吧 这明显对不起更多的人嘛 大体总结一下自己遇到的问题吧 一 现在论文提交量
  • Win10+CUDA8.0+Visual Studio2013安装、环境配置教程

    最近刚开始接触opencv的GPL编程 所以自己搜了下网上有关配置CUDA的过程 经过摸索整理 配置成功 现将教程整理如下 1 下载CUDA安装包 下载地址https developer nvidia com cuda downloads
  • 使用CUDA和CUFFT进行快速1D卷积的示例

    使用CUDA和CUFFT进行快速1D卷积的示例 在计算机视觉 数字信号处理和机器学习中 卷积是一种常见的操作 然而 卷积操作通常需要大量计算 因此需要一种高效的方法来完成 CUDA和CUFFT可以用于对使用FFT的快速1D卷积进行加速 在本
  • [Unity XLua]热更新XLua入门(一)-基础篇

    Aladdin XLua 前言 前段时间腾讯开源了一个内部热更框架XLua在Unity开发群里引起一阵热议 也受到广大开发者的热捧 然后我当然也抱着好奇的心去学习学习 后面也会将扩展之后的工程放在git上 大家一起学习交流 在此感谢XLua
  • c3p0数据库连接池死锁问题和mysql重连,连接丢失

    c3p0参数解释 最常用配置 initialPoolSize 连接池初始化时创建的连接数 default 3 取值应在minPoolSize与maxPoolSize之间 c3p0 initialPoolSize 10 minPoolSize
  • 敏捷项目管理ACP解析会笔记

    互联网时代企业环境现状 产品生命周期急剧缩短 市场环境变化太快 客户不满意 客户 团队 产品 产品需求界定不清 什么是敏捷项目管理 低成本 快速度 高质量 交付更高质量 敏捷宣言 个体和交互 重于过程和工具 可工作的软件 重于面面俱到的文档
  • Java高并发处理方案

    java高并发 如何解决 什么方式解决 一 什么是高并发 二 高并发解决思路 三 高并发解决方案 一 什么是高并发 1 1 高并发 High Concurrency 是互联网分布式系统架构设计中必须考虑的因素之一 它通常是指 通过设计保证系
  • 实现一个函数,判断一个数是不是素数

    include
  • Stream实现List和Map互转总结

    本文来说下Stream实现List和Map互转总结 文章目录 实体类 Map转List代码 List转Map代码 实体类 本篇介绍Stream流List和Map互转 同时在转换过程中遇到的问题分析 package cn wideth col