欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中Map的computeIfAbsent方法詳解

 更新時間:2023年11月30日 11:11:28   作者:啊幾  
這篇文章主要介紹了Java的Map中computeIfAbsent方法詳解,在jdk1.8中Map接口新增了一個computeIfAbsent方法,這是Map接口中的默認實現(xiàn)該方法是首先判斷緩存Map中是否存在指定的key的值,如果不存在,會調(diào)用mappingFunction(key)計算key的value,需要的朋友可以參考下

前言

在jdk1.8中Map接口新增了一個computeIfAbsent方法,這是Map接口中的默認實現(xiàn)

default V computeIfAbsent(K key,
            Function<? super K, ? extends V> mappingFunction) {
        Objects.requireNonNull(mappingFunction);
        V v;
        if ((v = get(key)) == null) {
            V newValue;
            if ((newValue = mappingFunction.apply(key)) != null) {
                put(key, newValue);
                return newValue;
            }
        }
        return v;
    }

該方法是首先判斷緩存Map中是否存在指定的key的值,如果不存在,會調(diào)用mappingFunction(key)計算key的value,然后將key = value 放入緩存Map中。

但如果mappingFunction(key)計算出來的value為null或拋出異常,則不會記錄緩存。

代碼實例

例1

/**
 * 如果key對應(yīng)的value值為null,則在map中放入該key和設(shè)置相應(yīng)的value
 */
public class Test {
    public static void main(String[] args) {
        Map<Integer,Integer> map = new HashMap<>();
        /**
         * 方法1:使用方法引用
         */
        map.computeIfAbsent(1,Test::compute);
        /**
         * 方法2:使用匿名內(nèi)部類
         */
        map.computeIfAbsent(1, new Function<Integer, Integer>() {
            @Override
            public Integer apply(Integer integer) {
                return integer;
            }
        });
        /**
         * 方法3:使用lambda
         */
        map.computeIfAbsent(1,key -> key);
        
        System.out.println(map.get(1));
    }

    static public Integer compute(Integer integer){
        return integer;
    }
}

例2

/**
 * 統(tǒng)計List出現(xiàn)相同字符串的個數(shù)
 */
public class Test {
    public static void main(String[] args) {
        Map<String,AtomicInteger> map = new HashMap<>();
        List<String> list = Arrays.asList(new String[]{"1","2","2","3","3","4","4","4"});
        list.forEach(str->map.computeIfAbsent(str,k->new AtomicInteger()).incrementAndGet());
        System.out.println(map);
    }
}
/**
 * {1=1, 2=2, 3=2, 4=3}
 */

這里用了兩次lambda,和下面方法是一樣

/**
 * 統(tǒng)計List出現(xiàn)相同字符串的個數(shù)
 */
public class Test {
    public static void main(String[] args) {
        Map<String,AtomicInteger> map = new HashMap<>();
        List<String> list = Arrays.asList(new String[]{"1","2","2","3","3","4","4","4"});
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                //尋找map中key對應(yīng)的value,如果map不存在指定key的值則new 一個AtomicInteger對象并加入緩存map中,如果存在則取到對應(yīng)的AtomicInteger對象并加一
                map.computeIfAbsent(s, new Function<String, AtomicInteger>() {
                    @Override
                    public AtomicInteger apply(String s) {
                        return new AtomicInteger();
                    }
                }).incrementAndGet();
            }
        });
        System.out.println(map);
    }
}
/**
 * {1=1, 2=2, 3=2, 4=3}
 */

總結(jié)

computeIfAbsent在一些實際開發(fā)場景中,能讓我們代碼看去更加簡潔,代碼質(zhì)量看去也更高。

到此這篇關(guān)于Java中Map的computeIfAbsent方法詳解的文章就介紹到這了,更多相關(guān)Map的computeIfAbsent方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis-plus使用注解 @TableField(exist = false)

    Mybatis-plus使用注解 @TableField(exist = false)

    這篇文章主要介紹了Mybatis-plus使用注解 @TableField(exist = false),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-03-03
  • 簡單談?wù)刯ava中final,finally,finalize的區(qū)別

    簡單談?wù)刯ava中final,finally,finalize的區(qū)別

    Java中final、finally、finalize的區(qū)別與用法,困擾了不少學(xué)習者,下面我們就這個問題進行一些探討,希望對大家的學(xué)習有所幫助。
    2016-05-05
  • Spring?Security?中多個身份驗證的示例代碼

    Spring?Security?中多個身份驗證的示例代碼

    這篇文章主要介紹了Spring?Security?中多個身份驗證的示例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • 深入剖析ArrayList的remove方法

    深入剖析ArrayList的remove方法

    這篇文章主要介紹了ArrayList的remove方法使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。</p>
    2021-09-09
  • Java多邊形重心計算

    Java多邊形重心計算

    今天小編就為大家分享一篇關(guān)于Java多邊形重心計算,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • springmvc九大組件之HandlerAdapter詳解

    springmvc九大組件之HandlerAdapter詳解

    這篇文章主要介紹了springmvc九大組件之HandlerAdapter詳解,RequestMappingHandlerAdapter支持的handler的類型是HandlerMethod,而HandlerMethod是通過解析@RequestMapping注解獲得的,需要的朋友可以參考下
    2023-11-11
  • springboot2整合redis使用lettuce連接池的方法(解決lettuce連接池無效問題)

    springboot2整合redis使用lettuce連接池的方法(解決lettuce連接池無效問題)

    這篇文章主要介紹了springboot2整合redis使用lettuce連接池(解決lettuce連接池無效問題),本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Map獲取鍵值,Map的幾種遍歷方法總結(jié)(推薦)

    Map獲取鍵值,Map的幾種遍歷方法總結(jié)(推薦)

    下面小編就為大家?guī)硪黄狹ap獲取鍵值,Map的幾種遍歷方法總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 理解Java面向?qū)ο缶幊淘O(shè)計

    理解Java面向?qū)ο缶幊淘O(shè)計

    這篇文章主要介紹了理解Java面向?qū)ο缶幊淘O(shè)計,面向?qū)ο缶幊淌且环N編程思維方式和編碼架構(gòu)。下面詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • Java下http下載文件客戶端和上傳文件客戶端實例代碼

    Java下http下載文件客戶端和上傳文件客戶端實例代碼

    這篇文章主要介紹了Java下http下載文件客戶端和上傳文件客戶端實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-12-12

最新評論