平时在开发过程中,会造一些假数据,比如给map集合添加一下假数据,每加一条数据,都进行put操作,比较麻烦,有没有快捷的办法呢?当然有,那就是使用Map.of()方法,他是jdk9 版本出现的api方法,可以快速的给map集合添加数据。
Map map = Map.of( "actTotal",12, "sqlTotal",100, "responseTime",20, "oldestxactNum",43, "oldestxactTime",7);
这样写起来非常的方便简洁
今天在工作中碰到一个问题,使用Map.of()方法,一直报错,源代码是这样的:
@Test public void test(){ Map m3 = Map.of( "TS_UTILIZATION_PERCENT", 77.13, "TS_TOTAL_SIZE_KB", 2097152, "EXE_TIME", "2024-06-14 13:54:22", "TS_PAGE_TOP", 404224, "TS_PAGESIZE", 4096, "TS_TYPE", "D", "DATA_TIME", "2024-06-14 13:54:22", "TS_USABLE_SIZE_KB", 2096128, "TS_NAME", "AFA_BEP_I", "TS_DATATYPE", "L"); m3.put("TS_STATE", "NORMAL"); m3.put("US_TOTAL_SIZE",100); m3.put("NO_US_TOTAL_SIZE",90); for (Map.Entry entry : m3.entrySet()) { System.out.println(entry.getKey() + "," + entry.getValue()); } }
报错信息如下:
java.lang.UnsupportedOperationException at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) at java.base/java.util.ImmutableCollections$AbstractImmutableMap.put(ImmutableCollections.java:1072) at org.dromara.test.patrol.SimpleTest.test(SimpleTest.java:26) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at ......................
Map.of()方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常,也就是说Map.of()返回之后的集合,不能在往里面加数据了,所以正确写法应该是这样
@Test public void test(){ Map m3 = Map.of( "TS_UTILIZATION_PERCENT", 77.13, "TS_TOTAL_SIZE_KB", 2097152, "EXE_TIME", "2024-06-14 13:54:22", "TS_PAGE_TOP", 404224, "TS_PAGESIZE", 4096, "TS_TYPE", "D", "DATA_TIME", "2024-06-14 13:54:22", "TS_USABLE_SIZE_KB", 2096128, "TS_NAME", "AFA_BEP_I", "TS_DATATYPE", "L"); for (Map.Entry entry : m3.entrySet()) { System.out.println(entry.getKey() + "," + entry.getValue()); } }
static Map of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10) { return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5, k6, v6, k7, v7, k8, v8, k9, v9, k10, v10); }
JDK9的新特性︰
List接口, Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素
static Listof (E… eLements)
使用前提:
当集合中存储的元素的个数已经确定了,不在改变时使用
注意:
1.of方法只适用于List接口,set接口,Map接口,不适用于接接口的实现类
2.of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常
3.Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则会抛出异常