MapUtils是 Apache Commons 工具包中常用的工具类,使用是需要依赖对应的lab,对应的maven引用如下:
org.apache.commons
commons-collections4
4.1
MapUtils 常用操作java.util.Map 和 java.util.SortedMap。
常用方法有:
isNotEmpty ( ) 是否不为空
isEmpty ( ) 是否为空
putAll ( ) 添加所有元素
getString ( ) 获取String类型的值
getObject ( ) 获取Object类型的值
getInteger ( )获取Integer类型的值
get*** ( ) 类似上面的
EMPTY_MAP 获取一个不可修改的空类型Map
unmodifiableMap 获取一个不可以修改的Map(不能新增或删除)
unmodifiableSortedMap 获取一个不可以修改的有序的Map(不能新增或删除)
fixedSizeMap 获取一个固定长度的map
multiValueMap 获取一个多值的map(即一个key可以对应多个value值)
invertMap 返回一个key与value对调的map
predicatedMap() 返回一个满足predicate条件的map
lazyMap 返回一个lazy的map(值在需要的时候可以创建)
String name = MapUtils.getString(map, "name");
int money = MapUtils.getInteger(map,"money");//包装类型自动拆箱
boolean empty = MapUtils.isEmpty(map);
boolean notEmpty = MapUtils.isNotEmpty(map);
//把二维数组转换成map
String[][] user = {{"names","zhangfsan"},{"sexs","1f"}};
Map map1 = MapUtils.putAll(map, user);
public class MapUtilsTest {
private String[][] color2DArray = new String[][] {
{"RED", "#FF0000"},
{"GREEN", "#00FF00"},
{"BLUE", "#0000FF"}
};
private String[] color1DArray = new String[] {
"RED", "#FF0000",
"GREEN", "#00FF00",
"BLUE", "#0000FF"
};
private Map colorMap;
//...
}
@Test
public void whenCreateMapFrom2DArray_theMapIsCreated() {
this.colorMap = MapUtils.putAll(
new HashMap<>(), this.color2DArray);
assertThat(
this.colorMap,
is(aMapWithSize(this.color2DArray.length)));
assertThat(this.colorMap, hasEntry("RED", "#FF0000"));
assertThat(this.colorMap, hasEntry("GREEN", "#00FF00"));
assertThat(this.colorMap, hasEntry("BLUE", "#0000FF"));
}
@Test
public void whenCreateMapFrom1DArray_theMapIsCreated() {
this.colorMap = MapUtils.putAll(
new HashMap<>(), this.color1DArray);
assertThat(
this.colorMap,
is(aMapWithSize(this.color1DArray.length / 2)));
assertThat(this.colorMap, hasEntry("RED", "#FF0000"));
assertThat(this.colorMap, hasEntry("GREEN", "#00FF00"));
assertThat(this.colorMap, hasEntry("BLUE", "#0000FF"));
}
@Test
public void whenVerbosePrintMap_thenMustPrintFormattedMap() {
MapUtils.verbosePrint(System.out, "Optional Label", this.colorMap);
}
/**
Optional Label =
{
RED = #FF0000
BLUE = #0000FF
GREEN = #00FF00
}
/*
@Test
public void whenGetKeyNotPresent_thenMustReturnDefaultValue() {
String defaultColorStr = "COLOR_NOT_FOUND";
String color = MapUtils
.getString(this.colorMap, "BLACK", defaultColorStr);
assertEquals(color, defaultColorStr);
}
@Test
public void whenGetOnNullMap_thenMustReturnDefaultValue() {
String defaultColorStr = "COLOR_NOT_FOUND";
String color = MapUtils.getString(null, "RED", defaultColorStr);
assertEquals(color, defaultColorStr);
}
@Test
public void whenInvertMap_thenMustReturnInvertedMap() {
Map invColorMap = MapUtils.invertMap(this.colorMap);
int size = invColorMap.size();
Assertions.assertThat(invColorMap)
.hasSameSizeAs(colorMap)
.containsKeys(this.colorMap.values().toArray(new String[] {}))
.containsValues(this.colorMap.keySet().toArray(new String[] {}));
}
/**
{
#00FF00 = GREEN
#FF0000 = RED
#0000FF = BLUE
}
*/
@Test(expected = IllegalArgumentException.class)
public void whenCreateFixedSizedMapAndAdd_thenMustThrowException() {
Map rgbMap = MapUtils
.fixedSizeMap(MapUtils.putAll(new HashMap<>(), this.color1DArray));
rgbMap.put("ORANGE", "#FFA500");
}
@Test(expected = IllegalArgumentException.class)
public void whenAddDuplicate_thenThrowException() {
Map uniqValuesMap
= MapUtils.predicatedMap(this.colorMap, null,
PredicateUtils.uniquePredicate());
uniqValuesMap.put("NEW_RED", "#FF0000");
}
@Test
public void whenCreateLazyMap_theMapIsCreated() {
Map intStrMap = MapUtils.lazyMap(
new HashMap<>(),
TransformerUtils.stringValueTransformer());
assertThat(intStrMap, is(anEmptyMap()));
intStrMap.get(1);
intStrMap.get(2);
intStrMap.get(3);
assertThat(intStrMap, is(aMapWithSize(3)));
}
参考:
https://tool.oschina.net/uploads/apidocs/commons-collections/index.html?org/apache/commons/collections/MapUtils.html
https://www.baeldung.com/apache-commons-map-utils
https://www.programcreek.com/java-api-examples/index.php?api=org.apache.commons.collections.MapUtils
https://www.codota.com/code/java/methods/org.apache.commons.collections.MapUtils/getInteger
https://www.techiedelight.com/initialize-map-using-apache-commons-collections-java/