亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java?Map初始化并賦值的幾種簡(jiǎn)短寫(xiě)法

 更新時(shí)間:2025年03月31日 11:01:41   作者:一周一志程序員  
在Java中初始化一個(gè)Map并賦值可以通過(guò)多種方式完成,下面這篇文章主要介紹了Java?Map初始化并賦值的幾種簡(jiǎn)短寫(xiě)法,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下

需求背景:

今天需要給多用戶發(fā)送郵件,但是用戶信息是固定的且數(shù)量有限,索性直接寫(xiě)死常量池,遍歷常量池進(jìn)行發(fā)郵件操作。設(shè)計(jì)階段考慮使用map進(jìn)行數(shù)據(jù)封裝賦值。為了使代碼簡(jiǎn)潔直觀,調(diào)研了幾種Java Map初始化并賦值的語(yǔ)法。

由于我目前使用的還是java jdk1.8所以還是選擇第一種內(nèi)聯(lián)方式創(chuàng)建。

對(duì)于初始化一個(gè) Map 并直接賦值為常量的場(chǎng)景,可以使用以下幾種簡(jiǎn)短寫(xiě)法:

1. 直接內(nèi)聯(lián)創(chuàng)建并添加

如果只需要一個(gè) Map,可以直接在 list.add() 方法中初始化:

List<Map<String, String>> list = new ArrayList<>();

list.add(new HashMap<>() {{
    put("companyName", "科技有限公司");
    put("loginUrl", "https://www.baidu.com/");
    put("bcc", "https://www.baidu.com/");
}});
  • 優(yōu)點(diǎn):減少變量聲明。
  • 缺點(diǎn):仍存在匿名內(nèi)部類問(wèn)題。

2. 使用雙括號(hào)初始化 (僅推薦在測(cè)試或臨時(shí)場(chǎng)景中使用)

List<Map<String, String>> list = new ArrayList<>();

Map<String, String> map = new HashMap<>() {{
    put("companyName", "科技有限公司");
    put("loginUrl", "https://www.baidu.com/");
    put("bcc", "https://www.baidu.com/");
}};

list.add(map);
  • 優(yōu)點(diǎn):寫(xiě)法直觀,支持可變的 Map。
  • 缺點(diǎn):
    • 生成的匿名內(nèi)部類可能會(huì)導(dǎo)致內(nèi)存泄漏,不推薦在生產(chǎn)代碼中使用。

3. 使用 Map.of() (Java 9+)

List<Map<String, String>> list = new ArrayList<>();

Map<String, String> map = Map.of(
    "companyName", "科技有限公司",
    "loginUrl", "https://www.baidu.com/",
    "bcc", "https://www.baidu.com/"
);

list.add(map);
  • 優(yōu)點(diǎn):代碼簡(jiǎn)潔,不需要顯式調(diào)用 put 方法。
  • 限制:
    • Map.of() 創(chuàng)建的 Map 是不可變的,不能再修改其內(nèi)容。

4. 使用 Map.ofEntries() (Java 9+)

適用于鍵值對(duì)超過(guò) 10 個(gè)的場(chǎng)景。

List<Map<String, String>> list = new ArrayList<>();

Map<String, String> map = Map.ofEntries(
    Map.entry("companyName", "科技有限公司"),
    Map.entry("loginUrl", "https://www.baidu.com/"),
    Map.entry("bcc", "https://www.baidu.com/")
);

list.add(map);
  • 優(yōu)點(diǎn):支持更多鍵值對(duì)初始化。
  • 限制:同樣生成的 Map 是不可變的。

5. 使用工具類構(gòu)造

如果初始化 Map 是常見(jiàn)需求,可以封裝一個(gè)工具方法:

public static <K, V> Map<K, V> mapOf(Object... entries) {
    Map<K, V> map = new HashMap<>();
    for (int i = 0; i < entries.length; i += 2) {
        map.put((K) entries[i], (V) entries[i + 1]);
    }
    return map;
}

調(diào)用:

List<Map<String, String>> list = new ArrayList<>();

Map<String, String> map = mapOf(
    "companyName", "科技有限公司",
    "loginUrl", "https://www.baidu.com/",
    "bcc", "https://www.baidu.com/"
);

list.add(map);
  • 優(yōu)點(diǎn):通用性強(qiáng),可在不同場(chǎng)景復(fù)用。
  • 限制:需要額外的工具類支持。

根據(jù)場(chǎng)景選擇合適的寫(xiě)法,如果所有內(nèi)容都是常量且不可變,推薦 Map.of() 或 Map.ofEntries() 的寫(xiě)法。

附:java多層map初始化

因?yàn)榫酆闲枨?,一開(kāi)始構(gòu)造了一個(gè)四層map,由于放入實(shí)例前需要先判斷前面的map存不存在,如果不存在則要new新的map,并把數(shù)據(jù)放進(jìn)去,一開(kāi)始直接if else寫(xiě)寫(xiě)了兩百多行。

cr之后覺(jué)得很丑陋,就尋找簡(jiǎn)單的方法去重寫(xiě)。首先將map結(jié)構(gòu)重新規(guī)劃,將一些固定的值從map中去除,將中間兩層的鍵用連接符合并,在輸出時(shí)再做拆分,這樣四層的map就簡(jiǎn)化成了兩層。

針對(duì)實(shí)例化的問(wèn)題,使用如下代碼:

Map<String, Map<String, Long>> tmpMap = new HashMap<>();
tmpMap.computeIfAbsent(key, k -> new HashMap<String, Long>{{
    put("test", 0L);
}})    // 沒(méi)有該鍵時(shí)構(gòu)建新的map,省去if-else的contains判斷
tmpMap.get(key).computeIfPresent("test", (String key, String value) -> ++value);    // 如果內(nèi)層map有該鍵,則值加1,省去先get再put步驟。

在用computeIfPresent()方法的時(shí)候犯了個(gè)錯(cuò)誤,一開(kāi)始寫(xiě)value++,由于lambda表達(dá)式相當(dāng)于匿名內(nèi)部類,value++會(huì)在該行執(zhí)行以后再增加值,而該行執(zhí)行后已經(jīng)退出了lambda范圍因而值沒(méi)變,而++value或者value + 1則能賦值,因而出于保險(xiǎn)起見(jiàn),在編碼中應(yīng)該盡量使用value += 1類似寫(xiě)法。

總結(jié)

到此這篇關(guān)于Java Map初始化并賦值的幾種簡(jiǎn)短寫(xiě)法的文章就介紹到這了,更多相關(guān)Java Map初始化賦值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一篇文章帶你了解MySQL數(shù)據(jù)庫(kù)基礎(chǔ)

    一篇文章帶你了解MySQL數(shù)據(jù)庫(kù)基礎(chǔ)

    這篇文章主要介紹了MySql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)點(diǎn),總結(jié)整理了mysql數(shù)據(jù)庫(kù)基本創(chuàng)建、查看、選擇、刪除以及數(shù)據(jù)類型相關(guān)操作技巧,需要的朋友可以參考下
    2021-08-08
  • Mybatis輸入輸出映射及動(dòng)態(tài)SQL Review

    Mybatis輸入輸出映射及動(dòng)態(tài)SQL Review

    這篇文章主要介紹了Mybatis輸入輸出映射及動(dòng)態(tài)SQL Review,需要的朋友可以參考下
    2017-02-02
  • IDEA自動(dòng)生成TestNG的testng.xml的插件方法

    IDEA自動(dòng)生成TestNG的testng.xml的插件方法

    這篇文章主要介紹了IDEA自動(dòng)生成TestNG的testng.xml的插件方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java優(yōu)秀類庫(kù)Hutool使用示例

    Java優(yōu)秀類庫(kù)Hutool使用示例

    Hutool是一個(gè)小而全的Java工具類庫(kù),通過(guò)靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,涵蓋了Java開(kāi)發(fā)開(kāi)發(fā)中的方方面面,使用Hutool可節(jié)省開(kāi)發(fā)人員對(duì)項(xiàng)目中公用類和公用工具方法的封裝時(shí)間,使開(kāi)發(fā)專注于業(yè)務(wù),同時(shí)可以最大限度的避免封裝不完善帶來(lái)的bug
    2023-02-02
  • Java8方法引用和構(gòu)造引用代碼實(shí)例

    Java8方法引用和構(gòu)造引用代碼實(shí)例

    這篇文章主要介紹了java8方法引用和構(gòu)造引用代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Springboot項(xiàng)目中定時(shí)任務(wù)的四種實(shí)現(xiàn)方式詳解

    Springboot項(xiàng)目中定時(shí)任務(wù)的四種實(shí)現(xiàn)方式詳解

    Spring的@Scheduled注解是一種非常簡(jiǎn)單和便捷的實(shí)現(xiàn)定時(shí)任務(wù)的方式,通過(guò)在方法上添加@Scheduled注解,我們可以指定方法在特定的時(shí)間間隔或固定的時(shí)間點(diǎn)執(zhí)行,本文給大家介紹Springboot項(xiàng)目中定時(shí)任務(wù)的四種實(shí)現(xiàn)方式,感興趣的的朋友一起看看b
    2024-02-02
  • Java多線程Thread類的使用及注意事項(xiàng)

    Java多線程Thread類的使用及注意事項(xiàng)

    這篇文章主要介紹了Java多線程Thread類的使用及注意事項(xiàng),在java標(biāo)準(zhǔn)庫(kù)中提供了一個(gè)Thread類來(lái)表示/操作線程,Thread類也可以視為是java標(biāo)準(zhǔn)庫(kù)提供的API
    2022-06-06
  • Java后臺(tái)如何處理日期參數(shù)格式

    Java后臺(tái)如何處理日期參數(shù)格式

    這篇文章主要介紹了Java后臺(tái)如何處理日期參數(shù)格式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot使用Nacos進(jìn)行application.yml配置管理

    SpringBoot使用Nacos進(jìn)行application.yml配置管理

    Nacos是阿里巴巴開(kāi)源的一個(gè)微服務(wù)配置管理和服務(wù)發(fā)現(xiàn)的解決方案,它提供了動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和?服務(wù)管理平臺(tái),Nacos使用Raft協(xié)議保證配置的一致性,同時(shí)支持多種配置?格式,如properties、yaml等,本文介紹了SpringBoot使用Nacos進(jìn)行application.yml配置管理
    2024-12-12
  • Java編譯時(shí)類型與運(yùn)行時(shí)類型

    Java編譯時(shí)類型與運(yùn)行時(shí)類型

    這篇文章主要介紹了Java編譯時(shí)類型與運(yùn)行時(shí)類型,文章以父類BaseClass和子類SubClass為例展開(kāi)對(duì)主題的探討,具有一的?參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論