Java-Map在JDK8中新增方法

JDK8–Map新增方法

因在看部分源码时,发现用到一些Map的新增方法但是并不知道其具体含义,故了解并整理。

computer

解释

简单点说就是针对key的value重新设值,具体的值取决于自定义函数返回值。
自定义函数返回值不等于空,则会将自定义函数返回的value设置成key对应的值。
如果key对应的value不等于空但是自定义函数返回值等于空则会删除这个key。

V oldValue = map.get(key);
// 通过自定义的BiFunction,对key和oldValue处理后返回新的数据
 V newValue = remappingFunction.apply(key, oldValue);
// 如果oldValue不为空
 if (oldValue != null ) {
   
     // 并且自定义的的BiFunction返回的newValue不等于空
    if (newValue != null)
        // 替换直接的oldValue
       map.put(key, newValue);
    else
        // 如果自定义的的BiFunction返回的newValue等于空,则移除该key
       map.remove(key);
 } else {
   
     // 如果oldValue等于空,newValue不等于空,则存放key,newValue到map中
    if (newValue != null)
       map.put(key, newValue);
    else
        // 否则返回null
       return null;
 }

简单使用

 Map<String, String> map = new HashMap<String, String>();
// 计算该key,如果value等于null则设置key=1,value=1,否则将该key对应的value+1存放到对应key
map.compute("1", (k, v) -> {
   
    return v == null ?
        String.valueOf(1) : String.valueOf(Integer.valueOf(v) + 1);
});
 System.out.println(map.containsKey("1"));//输出true
// 如果自定义函数返回null,则会删除该key
 map.compute("1", (k, v) -> {
   
        return null;
    });

 System.out.println(map.containsKey("1"));//输出false

应用场景

统计一个字符串中字符出现的次数

String str = "hello, i am vary happy! nice to meet you, my name is demo";
// jdk8之前的写法
HashMap<Character, Integer> result1 = new HashMap<>(32);
for (int i = 0; i < str.length(); i++) {
   
    char curChar = str.charAt(i);
    Integer curVal = result1.get(curChar);
    if (curVal == null) {
   
        curVal = 1;
    } else {
   
        curVal += 1;
    }
    result1.put(curChar, curVal);
}
 result1.forEach((k, v) -> {
   
     System.out.println(k + "--" + v);
 });

// 清除信息
result1.clear();

// jdk8的写法
for (
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值