首页 > 其他分享 >快速创建Map的工具类

快速创建Map的工具类

时间:2024-09-14 17:24:12浏览次数:8  
标签:Map map 创建 v1 k1 工具 k2 public

主要是简化代码。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author lyu
 * @description:
 * @create 2024-09-14 16:31
 */
public class MapUtils {

    private  MapUtils() {
        throw new UnsupportedOperationException("Disable creation of instance objects through reflection");
    }

    public static <K, V> Map<K, V> of(K k1, V v1) {
        Map<K, V> map = new HashMap<>();
        map.put(k1, v1);
        return map;
    }

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) {
        Map<K, V> map = of(k1, v1);
        map.put(k2, v2);
        return map;
    }

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3) {
        Map<K, V> map = of(k1, v1, k2, v2);
        map.put(k3, v3);
        return map;
    }

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
        Map<K, V> map = of(k1, v1, k2, v2, k3, v3);
        map.put(k4, v4);
        return map;
    }

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
        Map<K, V> map = of(k1, v1, k2, v2, k3, v3, k4, v4);
        map.put(k5, v5);
        return map;
    }

    /**
     * 建造者
     * @param <K> key class
     * @param <V> value class
     */
    public static class Builder<K, V> {
        
        public static class KeyValue<K, V> {
            private final K key;
            private final V value;

            public KeyValue(K key, V value) {
                this.key = key;
                this.value = value;
            }

            public K getKey() {
                return key;
            }

            public V getValue() {
                return value;
            }
        }

        private final List<KeyValue<K, V>> element = new ArrayList<>();

        public Builder<K, V> keyValue(K k, V v) {
            element.add(new KeyValue<>(k, v));
            // 链式调用
            return this;
        }

        public Map<K, V> build() {
            Map<K, V> map = new HashMap<>();
            element.forEach(elm -> map.put(elm.getKey(), elm.getValue()));
            element.clear();
            return map;
        }
    }
}

使用方式

import org.junit.Test;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.Map;

/**
 * @author lyu
 * @description:
 * @create 2024-09-14 16:52
 */
public class Main {
    @Test
    public void test1(){
        System.out.println(MapUtils.of("k", "v", "k2", "c","k3", "c","k4", "c"));
    }

    @Test
    public void test2(){
        Map<String, Integer> map = new MapUtils.Builder<String, Integer>()
                .keyValue("one", 1)
                .keyValue("two", 2)
                .keyValue("three", 3)
                .keyValue("12",2)
                .keyValue("qwe",23)
                .build();
        System.out.println(map);
    }

    @Test
    public void test3(){
        Map<String, Date> map = new MapUtils.Builder<String, Date>()
                .keyValue("one", new Date())
                .keyValue("two", new Date())
                .build();
        System.out.println(map);
    }

    @Test
    public void refection() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Class<MapUtils> clazz = MapUtils.class;
        // 获取无参构造函数
        Constructor<?> constructor = clazz.getDeclaredConstructor();
        //禁用安全检查
        constructor.setAccessible(true);
        // 创建对象
        Object person = constructor.newInstance();
        System.out.println(person);
    }


其中注意的一点是 MapUtils 构造方法是私有的,但是可通过反射去创建对象了,违反了工具类的设计初衷,那么可以在私有构造方法中抛出异常,那么通过反射也是不能创建对象的!

标签:Map,map,创建,v1,k1,工具,k2,public
From: https://www.cnblogs.com/lyuSky/p/18414402

相关文章

  • MATLAB分布式计算工具箱:高效并行处理指南
    在科学计算和工程模拟中,MATLAB的分布式计算工具箱(ParallelComputingToolbox)和MATLAB分布式计算引擎(MDCE)提供了强大的并行处理能力,使得大规模数据处理和复杂计算任务得以高效解决。本文将详细介绍如何在MATLAB中使用这些工具进行分布式计算。1.分布式计算工具箱和MDCE简......
  • DNSCAT2 是一个开源工具,用于通过 DNS 协议进行隐蔽的网络通信。它最初是由 Tim Wright
    DNSCAT2是一个开源工具,用于通过DNS协议进行隐蔽的网络通信。它最初是由TimWright开发的,目的是利用DNS协议的特点实现隐蔽的数据传输。DNSCAT2的主要用途是帮助安全研究人员测试和评估DNS相关的安全防护措施,尤其是在针对DNS隧道和数据泄露的防御方面。DNSCAT2的工作......
  • 网络服务性能优化:Wrktcp与Perf工具详解
    wrktcp安装码云地址:https://gitee.com/icesky1stm/wrktcp直接下载,cdwrktcp-master&&make,会生成wrktcp,就ok了,很简单wrktcp使用压测首先需要一个服务,写了一个epoll+边沿触发的服务,业务是判断ip是在国内还是国外,rq:00000015CHECKIP1.0.4.0,rs:000000010,写的有些就简陋兑付看......
  • 使用脚手架来创建 express 项目
    使用脚手架(scaffold)可以快速搭建Express应用程序的基本结构。Express自身提供了一个官方脚手架工具叫做express-generator,它可以帮助你快速地生成一个包含基本文件结构的Express项目。安装ExpressGenerator首先,你需要全局安装ExpressGenerator。在命令行中执行以下命令:npminstal......
  • 一些基于LLM可以进行web 检索的开源工具
    简单记录下,目前不少内部都会使用到langchain(毕竟提供了不少现在方便的工具包装),同时对于web内容处理很多也会选择基于无头浏览器模式,对于html内容为了方便llm处理好多框架会优先转换为markdown格式的,对于长内容同时也会进行chunk拆分,规避大模型上下文限制问题说明目前对于web......
  • 局域网聊天工具:提升企业内部信息安全的私有化即时通讯软件
    在数字化转型的过程中,越来越多的企业依赖即时通讯工具来进行内部沟通与协作。然而,许多企业在使用的微信、钉钉等SaaS聊天工具却存在着严重的安全隐患和管理难题,这些问题不仅危及信息安全,还影响企业的整体运营效率。针对这些痛点,选择一款私有化部署的局域网聊天工具成为了企业的当务......
  • RM1135、RM1135T量产修复成功,RTS5735DL量产工具操作教程,RTS5765DL、RTS5772DL开卡大致
    自己的固态坏了,本来打算找数据恢复公司恢复数据的,问了一下,大约需要上千块钱,算了,自己的数据还没这么值钱,于是就直接开卡了。这里把我自己研究的开卡方法分享给大家,注意开卡后硬盘数据会完全被擦除,不能恢复,所以有重要数据的话要提前备份!不好好看提示出了问题不要找我。开卡前必须准备......
  • Ubuntu系统Docker部署数据库管理工具DbGate并实现远程查询数据
    文章目录前言1.安装Docker2.使用Docker拉取DbGate镜像3.创建并启动DbGate容器4.本地连接测试5.公网远程访问本地DbGate容器5.1内网穿透工具安装5.2创建远程连接公网地址5.3使用固定公网地址远程访问前言本文主要介绍如何在LinuxUbuntu系统中使用Docker部......
  • 【Unity】创建动态的Tooltip
    需求说明文字内容动态变化;根据文字的内容自适应宽高;跟随鼠标移动;可以隐藏和展示;鼠标到达窗口边缘,tooltip停靠边缘可见;成果展示Scene部分查看UI相机和Canvas的设置注意将文字放在最左下角脚本部分TooltipScreenSpaceUI脚本绑定至TooltipScreenSpaceUI物体public......
  • 大学生必备10个AI工具网站,辅助完成辩论/开题/实践/形势政策报告、创新创业计划书、思
    大学新生和学长学姐们都已经开学了,忙碌的课程和多样的作业也随之开始,下面将给大学生们介绍10个辅助完成作业、寻找灵感,提升学习专注力和学术表现的AI工具~1、笔墨写作笔墨写作-领先的写作智能AI创作平台|官方首页笔墨写作是一款专注于各种文体写作的智能AI创作平台,提供全......