最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀Map中的computeIfAbsent方法

 更新時(shí)間:2026年05月05日 10:49:04   作者:naruto227  
文章介紹了Java 8中Map接口的computeIfAbsent方法,該方法用于在Map中獲取指定鍵的值,如果不存在則調(diào)用提供的函數(shù)計(jì)算值并放入Map中,并給出了使用示例

1、概述

在JAVA8的Map接口中,增加了一個(gè)computeIfAbsent,方法簽名如下:

default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)

Function是一個(gè)函數(shù)式接口

R apply(T t);

此方法首先判斷緩存map中是否存在指定的key值,如果不存在,會(huì)自動(dòng)調(diào)用mappingFunction(key)計(jì)算keyvalue,然后將key = value放入到緩存map

如果mappingFunction(key)返回的值為null或拋出異常,則不會(huì)有記錄存入map

2、代碼示例

2.1 示例1

Map<String, String> map = new HashMap<>();
// java8之前,從map中根據(jù)key獲取value操作可能會(huì)下面的操作
String key = map.get("key");
if (key == null) {
    key = "hh";
    map.put("key", key);
} else {
    // 如果key對(duì)應(yīng)的value值存在,進(jìn)行相應(yīng)的操作
}

// java8之后,上面的操作可以簡(jiǎn)化為一行,若key的value值為空,會(huì)將第二個(gè)參數(shù)的返回值存入并返回
String val = map.computeIfAbsent("key1", k -> "test");
System.out.println(map);
// 打印:{key1=test, key=hh}

2.2 示例2

Map<String, AtomicInteger> map = new HashMap<>();
// 統(tǒng)計(jì)字段出現(xiàn)個(gè)數(shù)
List<String> list = Lists.newArrayList("apple", "orange", "banana", "orange", "banana",
                                       "orange");
list.forEach(str -> map.computeIfAbsent(str, k -> new AtomicInteger()).getAndIncrement());
// 遍歷
map.forEach((k, v) -> System.out.println(k + ": " + v));

2.2 示例3

Map<String, List<String>> map = new HashMap<>();
// 如果key不存在,則創(chuàng)建新list并放入數(shù)據(jù);key存在,則直接往list放入數(shù)據(jù)
map.computeIfAbsent("fruit", k -> new ArrayList<>()).add("apple");
map.computeIfAbsent("fruit", k -> new ArrayList<>()).add("orange");
map.computeIfAbsent("language", k -> new ArrayList<>()).add("english");
// 遍歷
map.forEach((k, v) -> System.out.println(k + " " + v));
 遍歷
map.forEach((k, v) -> System.out.println(k + " " + v));

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis直接執(zhí)行SQL的工具SqlMapper

    MyBatis直接執(zhí)行SQL的工具SqlMapper

    今天小編就為大家分享一篇關(guān)于MyBatis直接執(zhí)行SQL的工具SqlMapper,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Java中常量池、堆和棧的區(qū)別對(duì)比與聯(lián)系

    Java中常量池、堆和棧的區(qū)別對(duì)比與聯(lián)系

    Java中堆存儲(chǔ)對(duì)象實(shí)例和字符串(JDK7+),棧保存方法調(diào)用信息與局部變量,常量池緩存編譯期常量,三者通過(guò)引用關(guān)聯(lián),堆與棧區(qū)分對(duì)象創(chuàng)建與存儲(chǔ),常量池優(yōu)化內(nèi)存復(fù)用,本文給大家介紹Java中常量池、堆和棧的區(qū)別對(duì)比與聯(lián)系,感興趣的朋友一起看看吧
    2025-09-09
  • Java中Semaphore(信號(hào)量)的使用方法

    Java中Semaphore(信號(hào)量)的使用方法

    這篇文章主要介紹了Java中Semaphore(信號(hào)量)的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java實(shí)現(xiàn)事件委托模式的實(shí)例詳解

    java實(shí)現(xiàn)事件委托模式的實(shí)例詳解

    這篇文章主要介紹了java實(shí)現(xiàn)事件委托模式的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例來(lái)說(shuō)明如何實(shí)現(xiàn)改功能,希望能幫助到大家理解這樣的模式,需要的朋友可以參考下
    2017-08-08
  • 詳解java nio中的select和channel

    詳解java nio中的select和channel

    這篇文章主要介紹了java nio中的select和channel
    2019-05-05
  • springboot2.0+elasticsearch5.5+rabbitmq搭建搜索服務(wù)的坑

    springboot2.0+elasticsearch5.5+rabbitmq搭建搜索服務(wù)的坑

    這篇文章主要介紹了springboot2.0+elasticsearch5.5+rabbitmq搭建搜索服務(wù)的坑,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Spring中獲取HttpServletRequest的三種方式小結(jié)

    Spring中獲取HttpServletRequest的三種方式小結(jié)

    spring框架web環(huán)境中,獲取HttpServletRequest是常見(jiàn)的操作,本文將為大家詳細(xì)介紹一下Spring中獲取HttpServletRequest的三種方式,有需要的小伙伴可以了解下
    2026-04-04
  • Java中的對(duì)象流總結(jié)(必看篇)

    Java中的對(duì)象流總結(jié)(必看篇)

    下面小編就為大家?guī)?lái)一篇Java中的對(duì)象流總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Java將json字符串轉(zhuǎn)換為數(shù)組的幾種方法

    Java將json字符串轉(zhuǎn)換為數(shù)組的幾種方法

    在Java開(kāi)發(fā)中,經(jīng)常會(huì)遇到將json字符串轉(zhuǎn)換為數(shù)組的需求,本文主要介紹了Java將json字符串轉(zhuǎn)換為數(shù)組的幾種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 深入理解Netty核心類及其作用

    深入理解Netty核心類及其作用

    本文介紹了Netty框架中的核心類及其作用,包括Channel、EventLoop、ChannelPipeline、ByteBuf等,通過(guò)對(duì)這些類的深入理解,可以更好地使用Netty進(jìn)行網(wǎng)絡(luò)編程開(kāi)發(fā)
    2023-04-04

最新評(píng)論

赤水市| 交城县| 怀来县| 永安市| 辽源市| 仙游县| 比如县| 衡山县| 四子王旗| 伊金霍洛旗| 麻阳| 府谷县| 长海县| 如东县| 古蔺县| 宁南县| 苍山县| 临夏县| 泽库县| 渝中区| 友谊县| 闸北区| 准格尔旗| 华宁县| 敦煌市| 寻乌县| 台山市| 精河县| 景洪市| 井冈山市| 邳州市| 桃园市| 镇平县| 西藏| 永平县| 罗山县| 大邑县| 夏邑县| 林州市| 定日县| 成安县|