Stream实现List和Map互转总结

news2024/11/26 17:57:27

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

文章目录

  • 实体类
  • Map转List代码
  • 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;
    }



}

测试结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】udp服务器实现大型网络聊天室

udp终结篇~ 文章目录 前言一、udp服务器实现大型网络聊天室总结 前言 根据上一篇文章中对于英汉互译和远程操作的两个小功能大家应该已经学会了&#xff0c;我们的目的是让大家可以深刻的理解udp服务器所需要的接口已经实现的简单步骤&#xff0c;下面我们开始实现网络聊天室。…

Spring 6【DI的两种方式、自动注入】(四)-全面详解(学习总结---从入门到深化)

目录 八、DI的两种方式 九、自动注入 八、DI的两种方式 IoC是由IoC容器帮助实例化Bean&#xff0c;并且在IoC容器内部注入关联属性(对象)的过程。 在上面演示的都是如何实例化Bean&#xff0c;下面演示的是如果给Bean注入属性。也就是说在讲解IoC/DI的另 一半功能。 在前面…

实训笔记7.18

实训笔记7.18 7.18一、座右铭二、Hadoop大数据技术 大数据软件一般都要求7*24小时不宕机三、Hadoop的组成3.1 HDFS3.2 MapReduce3.3 YARN3.4 Hadoop Common 四、Hadoop生态圈五、Hadoop的安装问题5.1 Hadoop的本地安装模式-基本不用5.2 Hadoop的伪分布安装模式5.3 Hadoop的完全…

webpack插件compression-webpack-plugin

Vue配置compression-webpack-plugin实现Gzip压缩 1、为什么要压缩&#xff1f; 打包的时候开启gzip可以很大程度减少包的大小&#xff0c;页面大小可以变为原来的30%甚至更小&#xff0c;非常适合于上线部署。更小的体积对于用户体验来说就意味着更快的加载速度以及更好的用户…

SOPC之NiosⅡ系统(五)

NIOS Ⅱ系统实例 目录 2.创建BSP工程 2.1 创建BSP工程 2.2 BSP Editor 2.3 创建C代码文件 3.Nios Ⅱ实例 3.1 Hello NIOS Ⅱ 3.2 System ID与Timestamp 3.3 蜂鸣器定时鸣叫 3.4 拨码开关输入GIO控制 4.FPGA器件的代码固化 4.1 嵌入式软件HEX文件生成 4.2 程序存储…

RocketMQ环境搭建

环境搭建 环境准备 下载地址: https://downloads.apache.org/rocketmq/4.9.5/安装 上传至服务器 mkdir /usr/soft #上传至此目录/usr/softmkdir /usr/soft 解压 cd /usr/soft unzip rocketmq-all-4.9.5-bin-release.zip移动 mkdir /usr/local/rocketmq cd /usr/soft mv r…

Mysql 修改group_concat_max_len的默认值

1.前言 最近在进行递归查询组织及其下属组织时&#xff0c;发现数据查询不全&#xff0c;子组织数据查询不出来的问题。经排查发现是group_concat_max_len的长度不足引起的&#xff0c;默认情况下group_concat_max_len1024&#xff0c;所以我们需要修改这个默认参数。 2.SQL语…

.net core控制台应用程序在linux运行

1&#xff09;创建.net 6.0控制台应用程序 2&#xff09;在应用根目录执行cmd命令发布应用&#xff1a;dotnet publish -o .\deploy 3&#xff09;将发布文件上传到服务器 4&#xff09;运行控制台应用程序&#xff08;dotnet /home/app/ConsoleApp/ConsoleApp5.dll&#xff09…

卡尔曼与扩展卡尔曼的区别与推导

1.卡尔曼的推导&#xff1a; 1&#xff09;先看系统随机系统状态空间模型&#xff1a;&#xff08;线性&#xff09; 所谓线性是指递推或者状态转移方程是线性的 至于参数解释自己去看书&#xff0c;本文旨在捋顺推导思路。 2&#xff09;k-1时刻值减去k-1的状态最优估计k-1时…

Vscode设置忽略文件,忽略node-modules、dist

####看图 files.exclude 设置排除和显示的文件夹 search.exclude 设置搜索时忽略的文件夹

WEB:Cat

背景知识 命令执行漏洞 Django框架 题目 先ping一下&#xff0c;输入127.0.0.1 这个输入可能存在命令执行的操作&#xff0c;但是经过尝试之后并不能正常执行 127.0.0.1&&dir、127.0.0.1&&ls、127.0.0.1|ls均被屏蔽&#xff0c;但经过尝试可知&#xff0c;网…

matplotlib笔记:qbstyle设置matplotlib 主题

0 原始matplotlib import numpy as np import matplotlib.pyplot as pltxnp.linspace(0,100) ynp.sin(100*x)plt.plot(x,y); 1 light from qbstyles import mpl_style mpl_style(darkFalse) #开启light主题 plt.plot(x,y); 2 dark from qbstyles import mpl_style mpl_styl…

实现大文件传输的几种方法,并实现不同电脑间大文件传输

随着网络技术的快速发展&#xff0c;大文件的传输需求越来越多&#xff0c;如何在不同的电脑之间实现大文件的快速传输&#xff0c;是一个挑战&#xff0c;下面介绍几种常用的方法可以解决这个问题。 1、利用局域网传输&#xff1a;把两台电脑接入同一个网络环境&#xff0c;通…

关于硬件加速器FPGA的异构加速流程龙蜥CI框架及实践介绍 | 第 87-88 期

本周「龙蜥大讲堂」预告来啦&#xff01;我们邀请了浪潮信息异构加速软件工程师刘科分享《基于 FPGA 的数据库硬件加速研究》、 CICD SIG Maintainer 李晔做《龙蜥社区 CI 框架及实践》主题演讲&#xff0c;精彩多多&#xff0c;快入群&#xff0c;预定前排小板凳观看直播&…

项目名称:无源在线词典项目

一&#xff0c;概述 基于C语言的网络电子词典项目&#xff0c;使用到了tcp协议的并发服务器设计、网络编程、文件I/O、数据库等多方面的知识。可以满足多用户同时登陆&#xff0c;用户登陆后可以查询单词及历史记录&#xff0c;具有查找快速&#xff0c;保密性好等优点。 开…

19.删除链表的倒数第N个节点

19.删除链表的倒数第N个节点 这道题是链表问题中双指针的一个经典应用 如果要删除倒数第n个节点&#xff0c;那么我们让fast快指针移动n步&#xff0c;然后让fast和慢指针slow同时开始移动&#xff0c;当fast指针指向链表末尾的时候&#xff0c;删掉slow指针指向的节点即可。 …

ai绘画工具哪个好用?这几款好用的ai绘画生成器安利给你

嘿&#xff0c;小伙伴们&#xff01;你是否曾经想过创作一幅酷炫的人物插画&#xff0c;但由于缺乏绘画技巧而放弃这个想法&#xff1f;别担心&#xff0c;现在有了ai绘画工具&#xff0c;让你轻松成为艺术家的潜力无限&#xff01;今天我就来给大家介绍几个用ai绘画工具生成好…

【iOS】ARC实现

ARC由以下工具来实现&#xff1a; clang&#xff08;LLVM编译器&#xff09;3.0以上objc4 Objective-C运行时库493.9以上 下面我们&#xff0c;我们将围绕clang汇编输出和objc4库的源代码探究ARC实现 1. __strong修饰符 1.1 赋值给附有__strong修饰符的变量 看下面代码 {…

Android TextView 在最后一行末尾加图标

当前有个需求.显示一段文本&#xff0c;文本最多显示两行&#xff0c;点击展开后才显示完全。当没有显示完全的时候&#xff0c;需要在文本的第二行末尾显示图标&#xff0c;点击图标和文本&#xff0c;文本展开。难点在于图标需要和第二行文本显示在同一行&#xff0c;高度和文…

JavaScript的WebAPI

这里写目录标题 DOM 基本概念获取元素事件概念事件的三要素操作元素获取/修改表单元素属性行内样式操作类名样式操作操作节点 DOM 基本概念 DOM 全称为 Document Object Model. W3C 标准给我们提供了一系列的函数, 让我们可以操作: 网页内容 ,网页结构, 网页样式 DOM数的结构如…