2 回答

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
所述(oldValue, newValue) -> oldValue, LinkedHashMap::new)
lambda表達(dá)式是合并函數(shù),它在具有相同鍵的兩個(gè)值應(yīng)用。在這種情況下,它返回第一個(gè)值并丟棄第二個(gè)值。
也就是說(shuō),您的代碼效率低下,因?yàn)槟趧?chuàng)建兩個(gè)Map
并運(yùn)行兩個(gè)Stream
管道。你可以用一個(gè)來(lái)實(shí)現(xiàn)同樣的目標(biāo):
Map<String, Long> getSortedLinkedHashMappedRankingArray(String[] rankingArray) { return Arrays .stream(rankingArray) .map(it -> it.split("\\s+")) .map(arr -> new SimpleEntry<> (arr[FIRST_PART], Long.valueOf(arr[SECOND_PART]))) .sorted(Map.Entry.comparingByValue()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new));}

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊
第三個(gè)參數(shù)java doc
* a merge function, used to resolve collisions between
* values associated with the same key, as supplied
* to {@link Map#merge(Object, Object, BiFunction)}
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldValue, newValue) -> oldValue, LinkedHashMap::new))
如果存在重復(fù)鍵,請(qǐng)選擇上一個(gè)鍵或新鍵
添加回答
舉報(bào)