List转为Map
List转为Map
1、业务需求,需要将List<SysSetting>转为Map
SysSetting是一个对象
@Data
@TableName("t_sys_setting")
@ApiModel(value = "SysSetting对象", description = "系统设置表")
public class SysSetting implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty("类型 10:交易设置 20:提现设置 30:签到设置")
    private String type;
    @ApiModelProperty(value = "键")
    @TableField("`key`")
    private String key;
    @ApiModelProperty(value = "值")
    private String value;
    @ApiModelProperty(value = "描述")
    private String description;
}
2、我们需要用到一个CollectionUtils,具体操作如下:
List<SysSetting> sysSettings = iSysSettingService.listSettingByCondition(SysSettingConstants.TYPE_SIGN);
Map<String, SysSetting> settingMap = CollectionUtils.convertMap(sysSettings, SysSetting::getKey);
convertMap方法如下。传参时param1:List<Entity>对象,param2:Entity的属性
    /**
     * List转Map(Map的值为List)
     *
     * @param from    List对象
     * @param keyFunc Map的键
     * @param <T>     List对象类型
     * @param <K>     键类型
     * @return map
     */
    public static <T, K> Map<K, T> convertMap(List<T> from, Function<T, K> keyFunc) {
        return from.stream().collect(Collectors.toMap(keyFunc, Function.identity()));
    }
得到的:Map<Entity::属性,Entity>
3、这样就完成了转换,下面我们看一下具体的效果。
转换之前List<SysSetting>
syssettings[
SysSetting(id=13, type=sign, key=sign_cycle, 	     value=7, description=签到周期),
SysSetting(id=14, type=sign, key=sign_reward_points, value=10, description=每日签到奖励-积分),
SysSetting(id=15, type=sign, key=sign_reward_exp,    value=10, description=每日签到奖励-成长值),
SysSetting(id=16, type=sign, key=sign_cont_json,     value=[
      {
        "signCycle": 2,
        "rewardPoints": 20,
        "rewardExp": 20
      },
      {
        "signCycle": 3,
        "rewardPoints": 40,
        "rewardExp": 40
      },
      {
        "signCycle": 6,
        "rewardPoints": 60,
        "rewardExp": 60
      }
    ], description=连续签到Json)]
转换之后Map<Entity::属性,Entity>
settingmap{
sign_reward_points = SysSetting(id=14, type=sign, key=sign_reward_points, value=10, description=每日签到奖励-积分),
sign_cont_json     = SysSetting(id=16, type=sign, key=sign_cont_json, value=[
      {
        "signCycle": 2,
        "rewardPoints": 20,
        "rewardExp": 20
      },
      {
        "signCycle": 3,
        "rewardPoints": 40,
        "rewardExp": 40
      },
      {
        "signCycle": 6,
        "rewardPoints": 60,
        "rewardExp": 60
      }
    ], description=连续签到Json),
sign_reward_exp     =  SysSetting(id=15, type=sign, key=sign_reward_exp, value=10, description=每日签到奖励-成长值),
sign_cycle			=  SysSetting(id=13, type=sign, key=sign_cycle, value=7, description=签到周期)}
4、CollectionUtils扩展
 /**
     * List转Map(Map的值为List对象的某个属性)
     *
     * @param from      List对象
     * @param keyFunc   Map的键
     * @param valueFunc Map的值
     * @param <T>       List对象类型
     * @param <K>       键类型
     * @param <V>       值类型
     * @return map
     */
    public static <T, K, V> Map<K, V> convertMap(List<T> from, Function<T, K> keyFunc, Function<T, V> valueFunc) {
        return from.stream().collect(Collectors.toMap(keyFunc, valueFunc));
    }
    public static <T, K, V> Map<K, List<V>> convertMultiMap(List<T> from, Function<T, K> keyFunc, Function<T, V> valueFunc) {
        return from.stream().collect(Collectors.groupingBy(keyFunc,
                Collectors.mapping(valueFunc, Collectors.toList())));
    }
    // 暂时没想好名字,先以 2 结尾噶
    public static <T, K, V> Map<K, Set<V>> convertMultiMap2(List<T> from, Function<T, K> keyFunc, Function<T, V> valueFunc) {
        return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toSet())));
    }
    public static boolean containsAny(Collection<?> source, Collection<?> candidates) {
        return org.springframework.util.CollectionUtils.containsAny(source, candidates);
    }
List转为Map的更多相关文章
- javabean实体类对象转为Map类型对象的方法(转发)
		//将javabean实体类转为map类型,然后返回一个map类型的值 public static Map<String, Object> beanToMap(Object obj) { ... 
- Java8将List转为Map
		1.实体 public class Hosting { private int id; private String name; private long websites; public Hosti ... 
- java8--List转为Map、分组、过滤、求和等操作----代码示例
		Java 8 函数式编程风格 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.他们说会影 ... 
- json数据转为Map集合
		我是利用Gson来弄得Gson gson = new Gson();//显得出HashMap的类型Type type = new TypeToken<HashMap<String, Str ... 
- JAVA中将对象转为Map类型
		之前讲过将Map转为JAVA对象的文章,那么问题来了,如果要把JAVA对象转为Map,又该怎么操作呢?这里亲测了2个方法可行,但目前这2个方法都是基于简单JAVA Bean的情况(即Bean中不能嵌套 ... 
- java中list强转为map类型
		起因:读取数据库文件的测试用例,测试用例需要存放到一个map中,方便下次调用, 读取的内容返回的内容存放在一个list中,并且数据内容是key=value的形式,最开始使用切片方式,做了很多无用功,后 ... 
- Java 8中Collection转为Map的方法
		Java 8中java.util.stream.Collectors提供了几个方法可用于把Collection转为Map结构,本文记录了个人对其中三个的理解. Method Return Type g ... 
- XML字符串转为Map集合
		public class xmlToMapUtils { /** * xml字符串转为map集合 * @param xmlStr * @return */ public static Map<S ... 
- Json数组形式的字符串转为Map数组、Map集合的几种遍历方式
		// Json数组形式的字符串转为Map数组 String strArr = "[{"name": "xx", "age": &q ... 
- getParameterMap()的返回值为Map<String, String[]>,从其中取得请求参数转为Map<String, String>的方法如下:
		直接遍历报错:[Ljava.lang.String;@44739f3f Map<String, String> tempMap = new HashMap<String, Strin ... 
随机推荐
- Linux的优缺点
			作为一个Archlinux用户, 断然是不会认为Linux有缺点的, 任何所谓的缺点都是自己技艺不精或者没有好好利用搜索引擎而造成的狭隘偏见. 但是假如是一位习惯于视窗系统的新手而言, 假如他上手的是 ... 
- 怎么用ChatGPT写代码,ChatGPT怎么改代码修BUG
			ChatGPT 是一个自然语言处理模型,可以模拟人类语言生成文本,可以用于写代码和修复bug.在本文中,我们将介绍如何使用 ChatGPT 写代码和修bug. 怎么用ChatGPT写代码? 虽然 Ch ... 
- android使用---->常用组件1
			在TextView中创建空心文字 <TextView android:layout_width="wrap_content" android:layout_height=&q ... 
- webgl 系列 —— 着色器语言
			其他章节请看: webgl 系列 着色器语言 本篇开始学习着色器语言 -- GLSL全称是 Graphics Library Shader Language (图形库着色器语言) GLSL 是一门独立 ... 
- mysql迁移:xtrabackup迁移mysql5.7.32
			问题描述:利用外部xtrabackup工具来做迁移mysql数据库,或者恢复数据库 xtrabackup迁移mysql 1.环境 mysql源库 mysql目标迁移库 IP 192.168.163.3 ... 
- Vulnhub Joy Walkthrough
			Recon 这台靶机对枚举的要求较高,如果枚举不出有用的信息可能无法进一步展开,我们首先进行普通的扫描. ┌──(kali㉿kali)-[~/Labs/Joy/80] └─$ sudo nmap -s ... 
- .NET敏捷开发框架-RDIFramework.NET V5.1发布(跨平台)
			RDIFramework.NET,基于全新.NET Framework与.NET Core的快速信息化系统敏捷开发.整合框架,给用户和开发者最佳的.Net框架部署方案.为企业快速构建跨平台.企业级的应 ... 
- 百度首页静态展示页面HTML+CSS
			一直觉得百度首页很复杂的,有那么多的东西,跟这个博主学习了之后,仿写了一下,样式好像很简单 只设置的一些组件的高度而已,不得不说,CSS真是个好东西呀 话不多说,直接上代码 <!DOCTYPE ... 
- [C++基础入门] 4、 程序流程结构
			文章目录 4 程序流程结构 4.1 选择结构 4.1.1 if语句 4.1.2 三目运算符 4.1.3 switch语句 4.2 循环结构 4.2.1 while循环语句 4.2.2 do...whi ... 
- 飞行时间技术TOF
			文章目录 飞行时间技术TOF 一. 光速的测定 二. 各种TOF技术 直接脉冲TOF 脉冲间接TOF 连续波调制TOF(Continous Wave TOF) 三. TOF技术的应用 飞行时间技术TO ... 
