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

Java使用Map映射遍歷的常用方法總結

 更新時間:2026年05月20日 08:59:22   作者:ok云科技  
這篇文章主要為大家詳細介紹了Java使用Map映射遍歷的常用方法,文中的示例代碼講解詳細并探討了在不同場景下應用這些方法的最佳實踐,希望對大家有所幫助

業(yè)務使用

private void handleResend(MqDeadLetterInventory deadLetter) {
    if (deadLetter == null || deadLetter.getQueueType() == null) {
        return;
    }

    // 映射:隊列類型 -> 對應的發(fā)送邏輯
    Map<Integer, Consumer<MqDeadLetterInventory>> sendActionMap = Map.of(
            MqConstants.INVENTORY_SKU_QUEUE, inventorySkuMqService::sendInventorySkuMq,
            MqConstants.INVENTORY_WAREHOUSE_QUEUE, inventoryWarehouseMqService::sendInventoryWarehouseMq,
            MqConstants.INVENTORY_INVOICE_QUEUE, invoiceStockMqService::sendInvoiceStockMq,
            MqConstants.INVENTORY_LOCATION_QUEUE, locationInventoryMqService::sendInventoryLocationMq
    );

    Integer queueType = deadLetter.getQueueType();
    Consumer<MqDeadLetterInventory> sendAction = sendActionMap.get(queueType);

    if (sendAction == null) {
        log.warn("未知的隊列類型: {}", queueType);
        return;
    }

    // 執(zhí)行發(fā)送
    sendAction.accept(deadLetter);

    // 刪除死信記錄
    int res = mqDeadLetterInventoryMapper.deleteMqDeadLetterInventoryById(deadLetter.getId(), deadLetter.getTenantId());
    if (res <= 0) {
        throw new ServiceException("刪除死信隊列失??!");
    }
}

代碼講解

1.相同參數 沒有返回值,使用:

Map<Integer, Consumer<MqDeadLetterInventory>>

Consumer 用來統(tǒng)一對象

  • MqDeadLetterInventory參數類型
  • .get 獲取對象
  • .accept 執(zhí)行對象

2.相同參數 有返回值,使用:

Map<Integer, Function<MqDeadLetterInventory, Result>>
  • Function 用來統(tǒng)一對象
  • MqDeadLetterInventory參數類型
  • Result 結果
  • .get 獲取對象
  • .apply 執(zhí)行對象, 執(zhí)行之后會有返回結果 Result

3.更多場景.....

其他 參數不同 等場景,自行根據需求處理

4.注意事項

Map.of()函數:

  • 參數不能為null;
  • 數量不能超過10條;

知識擴展

在 Java 中,Map 是存儲鍵值對(Key-Value)的數據結構。遍歷 Map 時,最核心的是獲取鍵、值或鍵值對。下面列舉幾種常用的遍歷方法,并給出代碼示例。

1. 使用 entrySet() 遍歷鍵值對(推薦)

這是效率最高、最常用的方式,直接拿到每個 Map.Entry 對象,同時獲取 key 和 value。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println(key + " -> " + value);
}

2. 使用 keySet() 遍歷鍵,再通過鍵獲取值

適合只需要鍵,或者需要單獨處理鍵的場景。但因為每次 get(key) 可能效率稍低(對于某些 Map 實現(xiàn)如 TreeMap 或 LinkedHashMap 依然是 O(1),但比 entrySet() 多一次哈希查找)。

for (String key : map.keySet()) {
    Integer value = map.get(key);
    System.out.println(key + " -&gt; " + value);
}

3. 使用 values() 遍歷所有值(不需要鍵)

如果你只需要處理 Map 中存儲的值,而不關心鍵。

for (Integer value : map.values()) {
    System.out.println(value);
}

4. 使用 forEach() 方法(Lambda 表達式,Java 8+)

代碼最簡潔,底層也是基于 entrySet

map.forEach((key, value) -&gt; System.out.println(key + " -&gt; " + value));

5. 使用迭代器(Iterator)

當需要在遍歷過程中刪除元素時,使用迭代器最安全(避免 ConcurrentModificationException)。

Iterator&lt;Map.Entry&lt;String, Integer&gt;&gt; iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
    Map.Entry&lt;String, Integer&gt; entry = iterator.next();
    if (entry.getValue() == 2) {
        iterator.remove();   // 安全刪除
    }
}

6. 使用 Stream API(Java 8+)

適合需要對鍵值對進行過濾、映射等操作時使用。

map.entrySet().stream()
    .filter(entry -&gt; entry.getValue() &gt; 1)
    .forEach(entry -&gt; System.out.println(entry.getKey()));

性能對比與建議

方法性能適用場景
entrySet最高同時需要 key 和 value,絕大多數場景推薦
keySet + get略低(多一次查找)僅需要 key,或很少次 get
values只需要 value
forEach與 entrySet 相當代碼簡潔,Java 8+ 首選
迭代器稍慢(有額外對象)需要邊遍歷邊刪除
Stream與 forEach 相當需要鏈式處理(過濾、映射等)

完整示例(整合多種方式)

import java.util.*;
public class MapTraversalDemo {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("Java", 1);
        map.put("Python", 2);
        map.put("C++", 3);
        // 1. entrySet + for-each
        for (Map.Entry<String, Integer> e : map.entrySet()) {
            System.out.println(e.getKey() + " = " + e.getValue());
        }
        // 2. keySet
        for (String key : map.keySet()) {
            System.out.println(key + " = " + map.get(key));
        }
        // 3. values
        for (Integer v : map.values()) {
            System.out.println(v);
        }
        // 4. forEach lambda
        map.forEach((k, v) -> System.out.println(k + " = " + v));
        // 5. iterator with removal
        Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            if (it.next().getValue() == 2) {
                it.remove();
            }
        }
        // 6. stream
        map.entrySet().stream()
            .filter(e -> e.getValue() > 1)
            .forEach(e -> System.out.println(e.getKey()));
    }
}

注意事項

  • 不要在 for-each 循環(huán)中直接刪除元素,否則會拋出 ConcurrentModificationException。必須使用迭代器或 Java 8 的 removeIf(如 map.entrySet().removeIf(entry -> condition))。
  • 對于 ConcurrentHashMap 等并發(fā)集合,遍歷時通常不會拋出異常,但迭代器不保證反映遍歷期間的修改。
  • 如果 Map 中的 key 或 value 為 null,上述方法均能正常處理(但需注意 HashMap 允許一個 null key 和多個 null value)。

 到此這篇關于Java使用Map映射遍歷的常用方法總結的文章就介紹到這了,更多相關Java Map映射遍歷內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現(xiàn)的Base64加密算法示例

    Java實現(xiàn)的Base64加密算法示例

    這篇文章主要介紹了Java實現(xiàn)的Base64加密算法,結合實例形式分析了Java實現(xiàn)的base64編碼轉換相關使用方法及操作注意事項,需要的朋友可以參考下
    2018-04-04
  • 消息中間件ActiveMQ的簡單入門介紹與使用

    消息中間件ActiveMQ的簡單入門介紹與使用

    消息隊列是指利用高效可靠的消息傳遞機制進行與平臺無關的數據交流,并基于數據通信來進行分布式系統(tǒng)的集成,這篇文章主要給大家介紹了關于ActiveMQ的簡單入門介與使用的相關資料,需要的朋友可以參考下
    2021-11-11
  • java方法重載和參數類型自動提升方式

    java方法重載和參數類型自動提升方式

    這篇文章主要介紹了java方法重載和參數類型自動提升方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java多線程并發(fā)編程和鎖原理解析

    Java多線程并發(fā)編程和鎖原理解析

    這篇文章主要介紹了Java多線程并發(fā)編程和鎖原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Maven中生命周期深度解析與實戰(zhàn)指南

    Maven中生命周期深度解析與實戰(zhàn)指南

    這篇文章主要為大家詳細介紹了Maven 生命周期實戰(zhàn)指南,包含核心概念、階段詳解、Spring Boot 特化場景及企業(yè)級實踐建議,希望對大家有一定的幫助
    2025-08-08
  • Java中LinkedList真的是查找慢增刪快

    Java中LinkedList真的是查找慢增刪快

    這篇文章主要介紹了Java中LinkedList真的是查找慢增刪快,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • springBoot集成redis(jedis)的實現(xiàn)示例

    springBoot集成redis(jedis)的實現(xiàn)示例

    Redis是我們Java開發(fā)中,使用頻次非常高的一個nosql數據庫,本文主要介紹了springBoot集成redis(jedis)的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 關于easyExcel中讀取Excel表頭的實例說明

    關于easyExcel中讀取Excel表頭的實例說明

    EasyExcel是阿里巴巴開源的一個excel處理框架,以使用簡單、節(jié)省內存著稱,下面這篇文章主要給大家介紹了關于easyExcel中讀取Excel表頭的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Spring5使用JSR 330標準注解的方法

    Spring5使用JSR 330標準注解的方法

    從Spring3.0之后,除了Spring自帶的注解,我們也可以使用JSR330的標準注解,本文主要介紹了Spring5使用JSR 330標準注解,感興趣的可以了解一下
    2021-09-09
  • JAVA匿名內部類語法分析及實例詳解

    JAVA匿名內部類語法分析及實例詳解

    這篇文章主要介紹了JAVA匿名內部類語法分析及實例詳解,匿名內部類可以使你的代碼更加簡潔,它與局部類很相似,不同的是它沒有類名,如果某個局部類你只需要用一次,那么你就可以使用匿名內部類。對此感興趣的可以了解一下
    2020-07-07

最新評論

滁州市| 长岛县| 天长市| 手游| 申扎县| 鄄城县| 恭城| 榆中县| 余庆县| 左云县| 遂平县| 正定县| 阿拉善左旗| 楚雄市| 安徽省| 鄢陵县| 大港区| 宁河县| 万盛区| 印江| 灵川县| 马关县| 色达县| 龙游县| 保德县| 高邑县| 汉源县| 玉林市| 邯郸县| 子长县| 安乡县| 贡觉县| 海伦市| 湘潭市| 逊克县| 大石桥市| 资兴市| 红河县| 丹阳市| 武宁县| 三河市|