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

Java?Map的compute方法舉例詳解

 更新時間:2024年06月22日 13:58:07   作者:喻師傅  
Java中的Map是一種用于存儲鍵值對的數(shù)據(jù)結(jié)構(gòu),它提供了一系列的方法來操作和訪問其中的元素,下面這篇文章主要給大家介紹了關(guān)于Java?Map的compute方法舉例詳解的相關(guān)資料,需要的朋友可以參考下

1.compute方法

compute 方法是 Map 接口中的一個方法,用于根據(jù)指定的鍵和計算函數(shù)對指定鍵的值進行修改。
方法的簽名如下:

default V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
  • key:要操作的鍵。
  • remappingFunction:一個接收鍵和當前鍵對應(yīng)的值作為輸入,并返回一個新值的函數(shù)。

compute 方法的行為取決于指定的鍵當前是否存在于 Map 中

  • 如果指定的鍵存在且對應(yīng)的值不為 null,則將鍵和對應(yīng)的值傳遞給 remappingFunction 函數(shù)。該函數(shù)返回的值將作為新的鍵值對中的值。如果函數(shù)返回的值為 null,則會從 Map 中刪除該鍵。

2.當指定的鍵不存在或其對應(yīng)的值為 null 時,它會根據(jù) remappingFunction 函數(shù)的返回值來確定如何處理:

  • 如果 remappingFunction 返回了一個非 null 的值,則會將新的鍵值對添加到 Map 中。
  • 如果 remappingFunction 返回了 null,則會從 Map 中刪除該鍵(如果存在)。

示例:

import java.util.HashMap;
import java.util.Map;

public class ComputeExample {
    public static void main(String[] args) {
        // 創(chuàng)建一個 HashMap 實例
        Map<String, Integer> map = new HashMap<>();
        
        // 添加鍵值對到 HashMap
        map.put("key1", 10);
        map.put("key2", 20);
        map.put("key3", null);

        // 使用 compute 方法更新現(xiàn)有的鍵值對
        map.compute("key1", (k, v) -> v == null ? 1 : v + 1); // key1 存在,值為 10,將值更新為 11
        map.compute("key2", (k, v) -> v == null ? 1 : v + 1); // key2 存在,值為 20,將值更新為 21
        map.compute("key3", (k, v) -> v == null ? null : v + 1); // key3 存在,值為 null,將值更新為 1
        map.compute("key4", (k, v) -> v == null ? 1 : v + 1); // key4 不存在,直接返回 1
        
        // 輸出更新后的 Map 內(nèi)容
        System.out.println("Updated Map: " + map);
    }
}
  • 對于已存在的鍵值對:
    • 如果值為 null,則將值更新為 1。
    • 如果值不為 null,則將原值加 1。
  • 對于不存在的鍵值對或者鍵的值為null:
    • 對于Key4,remappingFunction 返回了一個非 null 的值,則會將新的鍵值對添加到 Map 中。
    • 對于Key3,remappingFunction 返回了 null,則會從 Map 中刪除該鍵(如果存在)。

輸出更新后的 Map 內(nèi)容,可以看到每個鍵值對根據(jù) remappingFunction 的結(jié)果進行了更新或未發(fā)生改變。:

Updated Map: {key1=11, key2=21,key4=1}

這說明 compute 方法根據(jù)指定的函數(shù)對 Map 中的鍵值對進行了更新或操作。

2.computeIfAbsent方法

根據(jù)指定的鍵和計算函數(shù)在需要時對指定鍵的值進行修改。

方法的簽名如下:

default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
  • key:要操作的鍵。
  • mappingFunction:一個接收鍵作為輸入,并返回對應(yīng)值的函數(shù)。

computeIfAbsent 方法的行為:

  • 如果指定的鍵存在,并且對應(yīng)的值不為 null,則直接返回該值,不會執(zhí)行 mappingFunction 函數(shù)。
  • 如果指定的鍵不存在,或者對應(yīng)的值為 null,則執(zhí)行 mappingFunction 函數(shù),將函數(shù)返回的結(jié)果作為新的鍵值對中的值,并將其放入 Map 中

示例:

import java.util.HashMap;
import java.util.Map;

public class ComputeIfAbsentExample {
    public static void main(String[] args) {
        // 創(chuàng)建一個 HashMap 實例
        Map<String, Integer> map = new HashMap<>();
        
        // 添加鍵值對到 HashMap
        map.put("key1", 10);
        map.put("key2", 20);

        // 使用 computeIfAbsent 方法添加新的鍵值對
        map.computeIfAbsent("key1", k -> 100); // key1 存在,值為 10,不會執(zhí)行 mappingFunction
        map.computeIfAbsent("key3", k -> 30);  // key3 不存在,執(zhí)行 mappingFunction,將值 30 放入 Map
        
        // 輸出更新后的 Map 內(nèi)容
        System.out.println("Updated Map: " + map);
    }
}
  • 對于已存在的鍵值對:
    • 如果值不為 null,則直接返回原值,不會執(zhí)行 mappingFunction 函數(shù)。
  • 對于不存在的鍵值對(例如 "key3"):
    • 執(zhí)行 mappingFunction 函數(shù),將函數(shù)返回的值作為新的鍵值對中的值,并將其放入 Map 中。

最后,我們輸出更新后的 Map 內(nèi)容,可以看到只有在鍵值對不存在時,mappingFunction 函數(shù)才會被執(zhí)行。

示例輸出:

Updated Map: {key1=10, key2=20, key3=30}

3.computeIfPresent方法

鍵存在且對應(yīng)的值不為 null 時對指定鍵的值進行修改。

方法的簽名如下:

default V computeIfPresent(K key, BiFunction&lt;? super K, ? super V, ? extends V&gt; remappingFunction)
  • key:要操作的鍵。
  • remappingFunction:一個接收鍵和當前鍵對應(yīng)的值作為輸入,并返回一個新值的函數(shù)。

computeIfPresent 方法的行為如下:

  • 如果指定的鍵存在且對應(yīng)的值不為 null,則將鍵和對應(yīng)的值傳遞給 remappingFunction 函數(shù)。該函數(shù)返回的值將作為新的鍵值對中的值。如果函數(shù)返回的值為 null,則會從 Map 中刪除該鍵。
  • 如果指定的鍵不存在或其對應(yīng)的值為 null,則 remappingFunction 函數(shù)將不會執(zhí)行,computeIfPresent 方法直接返回 null,不會修改 Map 中的任何內(nèi)容。

示例:

import java.util.HashMap;
import java.util.Map;

public class ComputeIfPresentExample {
    public static void main(String[] args) {
        // 創(chuàng)建一個 HashMap 實例
        Map<String, Integer> map = new HashMap<>();
        
        // 添加鍵值對到 HashMap
        map.put("key1", 10);
        map.put("key2", 20);

        // 使用 computeIfPresent 方法更新現(xiàn)有的鍵值對
        map.computeIfPresent("key1", (k, v) -> v * 2); // key1 存在,值為 10,將值更新為 20
        map.computeIfPresent("key2", (k, v) -> v * 2); // key2 存在,值為 20,將值更新為 40
        map.computeIfPresent("key3", (k, v) -> v * 2); // key3 不存在,不會執(zhí)行 remappingFunction
        
        // 輸出更新后的 Map 內(nèi)容
        System.out.println("Updated Map: " + map);
    }
}
  • 對于已存在的鍵值對:
    • 如果值不為 null,則將鍵和對應(yīng)的值傳遞給 remappingFunction 函數(shù),并將函數(shù)返回的值作為新的鍵值對中的值。
  • 對于不存在的鍵值對(例如 "key3"):
    • remappingFunction 函數(shù)將不會執(zhí)行,computeIfPresent 方法直接返回 null,不會修改 Map 中的任何內(nèi)容。

最后,我們輸出更新后的 Map 內(nèi)容,可以看到只有存在且值不為 null 的鍵值對才會被更新。運行該示例將輸出:

Updated Map: {key1=20, key2=40}

computeIfPresent 方法根據(jù)指定的函數(shù)對 Map 中存在且值不為 null 的鍵值對進行了更新或操作。

總結(jié)

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

您可能感興趣的文章:

相關(guān)文章

  • idea關(guān)閉vim編輯模式的操作

    idea關(guān)閉vim編輯模式的操作

    這篇文章主要介紹了idea關(guān)閉vim編輯模式的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java高效實現(xiàn)大文件拷貝功能

    java高效實現(xiàn)大文件拷貝功能

    這篇文章主要為大家詳細介紹了java高效實現(xiàn)大文件拷貝功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Springboot如何獲取yml、properties參數(shù)

    Springboot如何獲取yml、properties參數(shù)

    這篇文章主要介紹了Springboot如何獲取yml、properties參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 十分簡單易懂的Java應(yīng)用程序性能調(diào)優(yōu)技巧分享

    十分簡單易懂的Java應(yīng)用程序性能調(diào)優(yōu)技巧分享

    這篇文章主要介紹了十分簡單易懂的Java性能調(diào)優(yōu)技巧分享,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • idea resources目錄下的application.properties不能自動提示問題

    idea resources目錄下的application.properties不能自動提示問題

    這篇文章主要介紹了idea resources目錄下的application.properties不能自動提示問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Jenkins安裝與配置及漢化過程

    Jenkins安裝與配置及漢化過程

    這篇文章主要介紹了Jenkins安裝與配置及漢化過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java聊天室之實現(xiàn)一個服務(wù)器與多個客戶端通信

    Java聊天室之實現(xiàn)一個服務(wù)器與多個客戶端通信

    這篇文章主要為大家詳細介紹了Java簡易聊天室之實現(xiàn)一個服務(wù)器與多個客戶端通信,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以了解一下
    2022-10-10
  • HashMap 和 Hashtable的區(qū)別

    HashMap 和 Hashtable的區(qū)別

    本文主要介紹HashMap 和 Hashtable的區(qū)別,這里整理了相關(guān)資料并詳細介紹了HashMap 和 Hashtable的區(qū)別及其工作原理和使用方法,有需要的朋友可以看一下
    2016-09-09
  • Java創(chuàng)建、識別條形碼和二維碼方法示例

    Java創(chuàng)建、識別條形碼和二維碼方法示例

    這篇文章主要給大家介紹了關(guān)于Java創(chuàng)建、識別條形碼和二維碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • RocketMQ消息丟失場景以及解決方法

    RocketMQ消息丟失場景以及解決方法

    這篇文章主要給大家介紹了關(guān)于RocketMQ消息丟失場景以及解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09

最新評論