溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java8中compute和merge方法如何使用

發(fā)布時(shí)間:2021-08-11 14:23:14 來(lái)源:億速云 閱讀:191 作者:Leah 欄目:大數(shù)據(jù)

java8中compute和merge方法如何使用,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

基礎(chǔ)數(shù)據(jù):

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

場(chǎng)景一對(duì)應(yīng)的方法是compute方法
compute,
對(duì)key存在的元素進(jìn)行加工,并返回加工后的元素,同時(shí)map中該元素也被替換成加工后的。如果對(duì)value進(jìn)行計(jì)算或邏輯處理,必須保證value非null。示例如下:

Map<String, KeyAndValue> maps = new HashMap<>();
maps.put("a",a1);
System.out.println(maps);
{a=KeyAndValue(name=kevin, value=lee)}//key存在時(shí)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不存在時(shí)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)}

當(dāng)然針對(duì)value不存在和存在,也有針對(duì)性的方法(computeIfAbsent和computeIfPresent)。

computeIfAbsent
key不存在或null,則處理,返回處理后結(jié)果,并更新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存在,則不進(jìn)行處理,返回value,不更新map。示例如下:

// key存在。不進(jìn)行任何處理,返回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存在則處理,返回處理后結(jié)果,并更新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,則不進(jìn)行處理,返回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);// {}

場(chǎng)景二對(duì)應(yīng)的方法merge

merge:對(duì)key存在的元素進(jìn)行合并,并返回加工后的元素
a6
就是合進(jìn)來(lái)的新值,a6newV是同一對(duì)象,所以newVa6可互換;
oldVmap中原有key對(duì)應(yīng)的值,oldV有值則合并,無(wú)值則新增對(duì)應(yīng)的kvalue=newV的鍵值對(duì)

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”無(wú)值,則新增"b":newVKeyAndValue merge1 = map.merge("b", a5, (oldV, newV) -> {
    oldV.setValue(oldV.getValue()+"___"+oldV.getValue());return oldV;    //a5就是合進(jìn)來(lái)的新值,a5和newV是同一對(duì)象,所以newV和a5可互換;    // oldV是map中原有key=“b”對(duì)應(yīng)的值,oldV有值則合并,無(wú)值則新增});
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)}

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI