首页 > 编程语言 >浅谈java8中map的新方法

浅谈java8中map的新方法

时间:2023-07-05 16:31:35浏览次数:36  
标签:map 浅谈 Map replace statesAndCapitals JDK8 方法 java8

浅谈java8中map的新方法_默认值

Map在java8中新增了两个replace的方法

1.replace(k,v)

在指定的键已经存在并且有与之相关的映射值时才会将指定的键映射到指定的值(新值)

在指定的键不存在时,方法会return回来一个null

javadoc的注释解释了该默认值方法的实现的等价Java代码

if (map.containsKey(key)) {

return map.put(key, value);

} else {

return null;

}

下面展示的是新方法和JDK8之前的方法比较:

/*

* 示范Map.replace(K, V)方法并和JDK8之前的实现方法做对比。JDK8

* 中新增的Map.replace(K, V)方法相比于传统的实现方法,所用的代码行数更少

* 并且允许用一个final类型iHqNXGmXWH的变量来接收返回值。

*/

// JDK8之前的实现方式

String replacedCapitalCity;

if (statesAndCapitals.containsKey("Alaska")) {

replacedCapitalCity = statesAndCapitals.put("Alaska", "Juneau");

}

// JDK8的实现方式

final String replacedJdk8City = statesAndCapitals.replace("Alaska", "Juneau");

2.replace(k,v,v)

第二的新增的Map replace方法在替换现存值方面有更窄的释义范围。当那个方法(上一个replace方法)只是涵盖指定的键在映射中有任意一个有效的值的替换处理,而这个“replace”方法接受一个额外的(第三个)参数,只有在指定的键和值都匹配的情况下才会替换。

javadoc注释说明了该默认值方法的实现:

if (map.containsKey(key) && Objects.equals(map.get(key), value)) {

map.put(key, newValue);

return true;

} else {

return false;

}

下面这段代码列举展示的是新实现方法和JDK8之前的实现方法的一个具体比较。

/*

* 示范Map.replace(K, V, V)方法并和JDK8之前的实现方法做对比。JDK8

* 中新增的Map.replace(K, V, V)方法相比于传统的实现方法,所用的代码行数更少

* 并且允许用一个final类型的变量来接收返回值。

*/

// JDK8之前的实现方式

boolean replaced = false;

if ( statesAndCapitals.containsKey("Nevada")

&& Objects.equals(statesAndCapitals.get("Nevada"), "Las Vegas")) {

statesAndCapitals.put("Nevada", "Carson City");

replaced = true;

}

// JDK8的实现方式

final boolean replacedJdk8 = statesAndCapitals.replace("Nevada", "Las Vegas", "Carson City");

标签:map,浅谈,Map,replace,statesAndCapitals,JDK8,方法,java8
From: https://blog.51cto.com/u_16155892/6632916

相关文章

  • HashMap的遍历方法
    Map<String,String>myMap=newHashMap<>();myMap.put("key1","value1");myMap.put("key2","value2");//for循环遍历for(Map.Entry<String,String>entry:myMap.entrySet()){Stringkey=entry.getKe......
  • restful api报错:Ambiguous handler methods mapped for ...
    问题最近,为了给大家搭建一个学习环境,开发了几个restfulapi  在用jmeter发请求的时候报错请求为: 报错:通过id查询,也会匹配到通过username查询{"code":1002,"msg":"请求失败","data":"Ambiguoushandlermethodsmappedfor'/qzcsbj/v2/users/4':{publiccom.qzcsbj.dem......
  • 解决vue中mapbox地图显示一半的问题
    解决vue中mapbox地图显示一半的问题问题描述:在vue中创建mapbox地图,地图只显示一般,查看浏览器开发者工具。发现将canvas.mapboxgl-canvas的position:absolute去掉就解决了。代码修改:获取到canvas.mapboxgl-canvas,并修改其position样式就ok修改前代码:<template><main......
  • 网易免费企业邮POP3/IMAP/SMTP配置
    网易免费企业邮支持POP3/IMAP/SMTP服务,您可以通过电脑客户端软件更好地收发邮件,服务器地址:POP3:pop.ym.163.com默认端口为:110(如勾选ssl安全链接,端口号为995)SMTP:smtp.ym.163.com默认端口为:25(如勾选ssl安全链接,端口号为994)IMAP:imap.ym.163.com默认端口为:143(如勾选ssl安全链......
  • Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?
    Photobyhippopx.com我们知道HashMap的底层是由数组,链表,红黑树组成的,在HashMap做扩容操作时,除了把数组容量扩大为原来的两倍外,还会对所有元素重新计算hash值,因为长度扩大以后,hash值也随之改变。如果是简单的Node对象,只需要重新计算下标放进去就可以了,如果是链表和红黑......
  • Java17新特性及代码示例:还在使用Java8? 这5个Java17新功能,你会喜欢的
    SpringBoot3.0最低支持JDK17,各开源软件正在全面拥抱JDK17.有升级计划的调查受访者中,37%的人计划在未来六个月内升级到2021年9月份发布的LTS版本JDK17。另有25%的人计划在未来6到12个月内升级到JDK17。这5个你喜欢的JDK17新功能,会让你升级JDK17吗?1.record类(记录类)传统的......
  • java中concurrentHashMAP和HashTable有什么区别?
    ConcurrentHashMap和HashTable都是Java中用于实现线程安全的哈希表数据结构的类,但它们有一些关键的区别。线程安全性:ConcurrentHashMap是通过使用锁分段技术来实现线程安全的。它将整个哈希表分成了多个段(默认为16个),每个段有自己的锁。这样,在大多数情况下,多个线程可以同时访问不同......
  • java调用filter,map方法
    java的集合类,没有直接实现filter,map这些函数式方法,要调用这些方法,可以使用Java8的StreamAPI详细使用可参考:Java8中Stream详细用法大全 Java8的StreamAPI的坑1.没有直接的findObj方法findFirst和findAny都不支持传入条件要从list中查找一个对象,只能通过filte......
  • ArcMap镶嵌数据集的创建、数据导入与数据范围修改方法
      本文介绍基于ArcMap软件,建立镶嵌数据集(MosaicDatasets)、导入栅格图像数据,并调整像元数值范围的方法。  镶嵌数据集(MosaicDatasets)是一种用以管理、显示、共享大量栅格数据的手段,在GIS领域具有较多的应用场景。本文就在常见的ArcMap软件中,进行镶嵌数据集的新建,在其中导入......
  • 【大厂面试必问】Java8 新特性
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌......