IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【java】 List集合转MAP工具类封装 -> 正文阅读

[Python知识库]【java】 List集合转MAP工具类封装


```java
package org.apache.rocketmq.console.util;

import com.google.common.base.Throwables;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;

/**
 * Created by kang.zou
 * on 2021/9/18
 */
public class ListToMapUtil {
    private static final Logger logger = LoggerFactory.getLogger(ListToMapUtil.class);

    private static final String EMPTYSTR = "";

    // 适用于KEY为get属性方法,VALUE为get属性方法
    public static <T> Map<String, String> toMap(List<T> convertList, String getNameOfKey, String getNameOfValue) {
        Map<String, String> resultMap = new HashMap<>();
        if (CollectionUtils.isEmpty(convertList)) {
            return resultMap;
        }
        for (T obj : convertList) {
            if(obj == null) continue;
            try{
                Object key = obj.getClass().getMethod(getNameOfKey).invoke(obj);
                Object value = obj.getClass().getMethod(getNameOfValue).invoke(obj);
                resultMap.put(key == null ? null : String.valueOf(key), value == null ? null : String.valueOf(value));
            }catch (Exception e) {
                logger.error("ListToMapUtil toMap1 method is reflecting, invoke key occur error:{}", Throwables.getStackTraceAsString(e));
            }
        }
        return resultMap;
    }

    // 适用于KEY为get属性方法,VALUE为get属性方法的集合, 并且KEY,VALUE都不能为空
    public static <T> Map<String, List<String>> toMapListStrWithoutNull(List<T> convertList, String getNameOfKey, String getNameOfValue) {
        Map<String, List<String>> resultMap = new HashMap<>();
        if (CollectionUtils.isEmpty(convertList)) {
            return resultMap;
        }
        for (T obj : convertList) {
            if(obj == null) continue;
            try{
                Object key = obj.getClass().getMethod(getNameOfKey).invoke(obj);
                Object value = obj.getClass().getMethod(getNameOfValue).invoke(obj);
                if(key == null || value == null) {
                    continue;
                }
                List<String> values = resultMap.get(String.valueOf(key));
                if(values == null) {
                    values = new ArrayList<>();
                }
                values.add(String.valueOf(value));
                resultMap.put(String.valueOf(key), values);
            }catch (Exception e) {
                logger.error("ListToMapUtil toMap method is reflecting, invoke key occur error:{}", Throwables.getStackTraceAsString(e));
            }
        }
        return resultMap;
    }


    // 适用于KEY为get属性方法,VALUE为单个对象, 带前缀
    public static <T> Map<String, T> toMapWithPrefix(List<T> convertList, String getNameOfKey, String prefix, String separator) {
        Map<String, T> resultMap = new HashMap<>();
        if (CollectionUtils.isEmpty(convertList)) {
            return resultMap;
        }
        for (T obj : convertList) {
            if(obj == null) {
                continue;
            }
            try{
                Object key = obj.getClass().getMethod(getNameOfKey).invoke(obj);
                resultMap.put(prefix + separator + (key == null ? null : String.valueOf(key)), obj);
            }catch (Exception e) {
                logger.error("ListToMapUtil toMap method is reflecting, invoke key occur error:{}", Throwables.getStackTraceAsString(e));
            }
        }
        return resultMap;
    }

    // 适用于KEY为get属性方法,VALUE为单个对象, 带前缀+分割符
    public static <T> Map<String, T> toMapWithPrefix(List<T> convertList, String getNameOfKey, String prefix) {
        return toMapWithPrefix(convertList, getNameOfKey, prefix, EMPTYSTR);
    }

    // 适用于KEY为get属性方法,VALUE为单个对象
    public static <T> Map<String, T> toMap(List<T> convertList, String getNameOfKey) {
        return toMapWithPrefix(convertList, getNameOfKey, EMPTYSTR, EMPTYSTR);
    }


    // 适用于KEY为get属性方法,VALUE为对象的集合
    public static <T> Map<String, List<T>> toMapList(List<T> convertList, String getNameOfKey) {
        Map<String, List<T>> resultMap = new HashMap<>();
        if (CollectionUtils.isEmpty(convertList)) {
            return resultMap;
        }
        for (T obj : convertList) {
            if(obj == null) {
                continue;
            }
            try{
                Object keyObj = obj.getClass().getMethod(getNameOfKey).invoke(obj);
                String key = keyObj == null ? null : String.valueOf(keyObj);
                List<T> list = resultMap.get(key);
                if(list == null) {
                    list = new ArrayList<>();
                }
                list.add(obj);
                resultMap.put(key, list);
            }catch (Exception e) {
                logger.error("ListToMapUtil toMap method is reflecting, invoke key occur error:{}", Throwables.getStackTraceAsString(e));
            }
        }
        return resultMap;
    }


    public static void main(String[] args) {
        List<Test> convertList = Lists.newArrayList(new Test("pdd", 23, null, "guichu"), new Test("lbw", 24,
                new Date(), "running"), new Test(null, 21, null, "chess"), new Test("pdd", 23, null, "game"));
        System.out.println(ListToMapUtil.toMap(convertList, "getId", "getHabit"));
        System.out.println(ListToMapUtil.toMapListStrWithoutNull(convertList, "getId", "getHabit"));
        System.out.println(ListToMapUtil.toMap(convertList, "getId"));
        System.out.println(ListToMapUtil.toMapList(convertList, "getId"));
        System.out.println(ListToMapUtil.toMapWithPrefix(convertList, "getId", "SUB"));
        System.out.println(ListToMapUtil.toMapWithPrefix(convertList, "getId", "SUB", "|"));
    }


    public static class Test {
        private String id;

        private int age;

        private Date birth;

        private String habit;

        public Test(){}

        public Test(String id, int age, Date birth, String habit) {
            this.id = id;
            this.age = age;
            this.birth = birth;
            this.habit = habit;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public Date getBirth() {
            return birth;
        }

        public void setBirth(Date birth) {
            this.birth = birth;
        }

        @Override
        public String toString() {
            return "Test{" +
                    "id='" + id + '\'' +
                    ", age=" + age +
                    ", birth=" + birth +
                    ", habit='" + habit + '\'' +
                    '}';
        }

        public String getHabit() {
            return habit;
        }

        public void setHabit(String habit) {
            this.habit = habit;
        }
    }

}

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:56:01  更:2021-09-19 07:56:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:38:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码