温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java8中compute和merge方法如何使用

发布时间:2021-08-11 14:23:14 来源:亿速云 阅读:192 作者:Leah 栏目:大数据

java8中compute和merge方法如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

基础数据:

KeyAndValue a1 = new KeyAndValue().setName("kevin").setValue("lee");
KeyAndValue a5 = new KeyAndValue().setName("kevin2").setValue("lee5");
KeyAndValue a6 = new KeyAndValue().setName("kevin3").setValue("lee8");

场景一对应的方法是compute方法
compute,
key存在的元素进行加工,并返回加工后的元素,同时map中该元素也被替换成加工后的。如果对value进行计算或逻辑处理,必须保证value非null。示例如下:

Map<String, KeyAndValue> maps = new HashMap<>();
maps.put("a",a1);
System.out.println(maps);
{a=KeyAndValue(name=kevin, value=lee)}//key存在时KeyAndValue compute1 = maps.compute("a", (k, v) -> {
    Optional.ofNullable(v).ifPresent(v1 -> v1.setValue(v.getValue().concat("__ddddd")));return v;
});
System.out.println(compute1);// KeyAndValue(name=kevin, value=lee__ddddd)System.out.println(maps);// {a=KeyAndValue(name=kevin, value=lee__ddddd)}// key不存在时KeyAndValue compute = maps.compute("b", (k, v) -> {
    Optional.ofNullable(v).ifPresent(v1 -> v1.setValue(v.getValue().concat("__ddddd")));return v;
});
System.out.println(compute);//nullSystem.out.println(maps);// {a=KeyAndValue(name=kevin, value=lee__ddddd)}

当然针对value不存在和存在,也有针对性的方法(computeIfAbsent和computeIfPresent)。

computeIfAbsent
key不存在或null,则处理,返回处理后结果,并更新value;

//key不存在或nullMap<String, KeyAndValue> map = new HashMap<>();
System.out.println(map);//{}KeyAndValue computeIfAbsent = map.computeIfAbsent("a", s -> {return a6;
});
System.out.println(computeIfAbsent);// KeyAndValue(name=kevin3, value=lee8)System.out.println(map);// {a=KeyAndValue(name=kevin3, value=lee8)}


key存在,则不进行处理,返回value,不更新map。示例如下:

// key存在。不进行任何处理,返回valueMap<String, KeyAndValue> map = new HashMap<>();
map.put("a",a1);
System.out.println(map);// {a=KeyAndValue(name=kevin, value=lee)}KeyAndValue computeIfAbsent1 = map.computeIfAbsent("a", s -> {return a6;
});
System.out.println(computeIfAbsent1);// KeyAndValue(name=kevin, value=lee)System.out.println(map);// {a=KeyAndValue(name=kevin, value=lee)}

computeIfPresent
key存在则处理,返回处理后结果,并更新value;

//key存在则处理Map<String, KeyAndValue> map = new HashMap<>();
map.put("a",a1);
System.out.println(map);// {a=KeyAndValue(name=kevin, value=lee)}KeyAndValue computeIfPresent = map.computeIfPresent("a", (k, v) -> {return v.setValue(v.getValue().concat("_00000"));
});
System.out.println(computeIfPresent);// KeyAndValue(name=kevin, value=lee_00000)System.out.println(map);// {a=KeyAndValue(name=kevin, value=lee_00000)}


key不存在或null,则不进行处理,返回null,不更新value

//key不存在则处理Map<String, KeyAndValue> map = new HashMap<>();// map.put("a",null);System.out.println(map);//{}KeyAndValue computeIfPresent = map.computeIfPresent("a", (k, v) -> {return v.setValue(v.getValue().concat("_00000"));
});
System.out.println(computeIfPresent);// nullSystem.out.println(map);// {}

场景二对应的方法merge

merge:key存在的元素进行合并,并返回加工后的元素
a6
就是合进来的新值,a6newV是同一对象,所以newVa6可互换;
oldVmap中原有key对应的值,oldV有值则合并,无值则新增对应的kvalue=newV的键值对

Map<String, KeyAndValue> map = new HashMap<>();
map.put("a",a1);
System.out.println(map);// {a=KeyAndValue(name=kevin, value=lee)}
//“a”有值,则合并KeyAndValue merge = map.merge("a", a6, (oldV, newV) -> {
    oldV.setValue(newV.getValue()+"___"+oldV.getValue());return oldV;

});
System.out.println(merge);// KeyAndValue(name=kevin, value=lee8___lee)System.out.println(map);// {a=KeyAndValue(name=kevin, value=lee8___lee)}//“b”无值,则新增"b":newVKeyAndValue merge1 = map.merge("b", a5, (oldV, newV) -> {
    oldV.setValue(oldV.getValue()+"___"+oldV.getValue());return oldV;    //a5就是合进来的新值,a5和newV是同一对象,所以newV和a5可互换;    // oldV是map中原有key=“b”对应的值,oldV有值则合并,无值则新增});
System.out.println(merge1);// KeyAndValue(name=kevin2, value=lee5)System.out.println(map);// {a=KeyAndValue(name=kevin, value=lee), b=KeyAndValue(name=kevin2, value=lee5)}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI