1.介绍

Maputils.是Apache Commons Collections项目中提供的工具之一。

简单地说,它提供了实用方法和装饰者与之合作java.util.map.java.util.sortedMap.实例。

2.设置

让我们开始添加依赖

<依赖>  org.apache.commons   Commons-CollectionS4   4.1  

3.实用方法

3.1。创造A.地图从A.大批

现在,让我们设置我们将用于创建地图的阵列:

公共类maputilstest {private string [] [] color2darray = new string [] [] [] [] [] [] [] {{{绿色“,”#ff0000“},{blue”,“#00ff00”},{blue“,”#0000ff“}};私有字符串[] color1darray = new string [] {“红色”,“#ff0000”,“绿色”,“#00ff00”,“蓝色”,“#0000ff”};私有地图<字符串,字符串> ColorMap;// ......}

让我们看看我们如何从二维数组创建一个地图:

@test公共vod whileCreateMapfrom2darray_themapiscreated(){this.colormap = maputils.putlal(new hashmap <>(),this.color2darray);assertthat(this.Colormap,是(Amapwithsize(this.color2darray.length))));assertthat(this.colormap,hasentry(“红色”,“#ff0000”));assertthat(this.colormap,hasentry(“绿色”,“#00ff00”));assertthat(this.colormap,hasentry(“蓝色”,“#0000ff”));}

我们也可以使用一维数组。在这种情况下,该数组被视为备用指数中的键和值:

@test公共vod whercreatemapfrom1darray_themapiscreated(){this.colormap = maputils.putlal(new hashmap <>(),this.color1darray);Assertthat(this.ColorMap,是(Amapwithsize(this.color1darray.length / 2))));assertthat(this.colormap,hasentry(“红色”,“#ff0000”));assertthat(this.colormap,hasentry(“绿色”,“#00ff00”));assertthat(this.colormap,hasentry(“蓝色”,“#0000ff”));}

3.2。打印内容地图

在调试或调试日志时多次,我们想打印整个地图:

@test public void whener verboseprintmap_thenmustprintmattedmap(){maputils.verboseprint(system.out,“可选标签”,this.ColorMAP);}

结果:

可选标签= {red =#ff0000 blue =#0000ff green =#00ff00}

我们也可以使用debugpretter()其另外打印值的数据类型。

3.3。获取价值

Maputils.提供了一些方法,用于从地图中提取值的方法空值-Safe方式。

例如,getstring()得到一个细绳来自地图。这细绳通过ToString()。如果值是,我们可以选择指定要返回的默认值空值或者如果转换失败:

@test public void whengetkeynotpresent_thenmustrurndefaultvalue(){string defaultcolorstr =“color_not_found”;字符串颜色= maputils .getstring(this.ColorMap,“黑色”,defaultColorstr);assertequals(颜色,defaultcolorstr);}

请注意,这些方法是空值-Safe i.e.他们可以安全地处理空值地图参数:

@test public vod whongetonnullmap_thenmustrurndefaultvalue(){string defaultcolorstr =“color_not_found”;字符串颜色= maputils.getstring(null,红色“,defaultcolorstr);assertequals(颜色,defaultcolorstr);}

在这里颜色会得到价值color_not_found.即使地图是空值

3.4。反转这一点地图

我们也可以轻松反转地图:

@test公共void whentinvertmap_thenmustringininvertedmap(){map  invcolormap = maputils.invertmap(this.colormap);int size = invcolormap.size();assertons.asterthat(invcolormap).hassamesizeas(colormap).containskeys(this.colormap.values()。toarray(new string [] {})).containsValues(this.colormap.keyset()。ToArray(New String [] {}));}

这会颠倒COLOROMAP.

{#00ff00 =绿色#ff0000 =红色#0000ff =蓝色}

如果源映射为多个键关联相同的值,则在反转之后,其中一个值将随机变为关键。

3.5。无效和空检查

是空的()方法退货真的如果一个地图空值或空。

safeaddtomap()方法可防止向A添加空元素地图。

4.装饰

这些方法为a添加了附加功能地图。

在大多数情况下,良好的做法不是为了存储对装饰地图的参考

4.1。固定大小地图

fixedsizemap()返回由给定地图支持的固定大小的映射。元素可以更改但未添加或删除:

@Test(预期= IllegalArgumentException.Class)public void whencreatefixedsizedmapandaddd_thenmustthrowexception(){map  rgbmap = maputils .fixedsizemap(maputils.putorl(new hashmap <>(),this.color1darray));rgbmap.put(“橙色”,“#ffa500”);}

4.2。追求地图

predicativemap()方法返回A.地图确保所有保持元素都符合提供的谓词:

@Test(预期= IllegalArgumentException.Class)当AddDuplicate_thentHrowException(){map  uniqvaluesmap = maputils.predictionmap(this.colormap,null,predicateutils.uniquepredicate());UniqValuesMap.put(“new_red”,“#ff0000”);}

在这里,我们指定了使用值的谓词PredicateUtils.UniquePredicate()。任何将重复值插入此地图的尝试都将导致java.lang。IllegalArgumentException.

我们可以通过实施来实现自定义谓词谓词界面。

4.3。懒惰的地图

Lazymap()返回一个地图,其中在请求时初始化值。

如果一个密钥传递给这个地图map.get(对象)方法不存在于地图中,变压器实例将用于创建将与所请求的密钥关联的新对象:

@test公共void whencreateLazyyMap_ThemapisCreated(){Map  IntStrmap = MapUtils.Lazymap(New HashMap <>(),TransformerUtils.StringValueTransformer());Assertthat(IntStrmap,是(anemptymap())));INTSTRMAP.GET(1);INTSTRMAP.GET(2);INTSTRMAP.GET(3);assertthat(Intstrmap,是(Amapwithsize(3)));}

结论

在此快速教程中,我们探索了Apache Commons CollectionsMaputils.课程,我们查看了各种公用事业方法和装饰器,可以简化各种常用地图操作。

像往常一样,代码可用在github上

下一个»
Apache Commons CircularFifoQueue指南
«以前的
Apache Commons Collections Collectionutils指南
通用底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
评论在本文上关闭!