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

java ImmutableMap的使用說明

 更新時(shí)間:2021年06月10日 15:00:39   作者:Arvin_Wong  
這篇文章主要介紹了java ImmutableMap的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

ImmutableMap:一個(gè)不可變集合

java中的Immutable對(duì)象:

簡(jiǎn)單地說,如果一個(gè)對(duì)象實(shí)例不能被更改就是一個(gè)Immutable的對(duì)象,Java SDK提供的大量值對(duì)象,比如String等都是Immutable的對(duì)象。

創(chuàng)建ImmutableMap:

Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>().build();

在創(chuàng)建時(shí)放值:

Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>()
    .put("k1","v1")
    .put("k2","v2")
    .build();

創(chuàng)建后不可變:

immutableMap.put("k1","v3");//會(huì)拋出java.lang.UnsupportedOperationException

ImmutableMap中key和value均不能為null,放入null值會(huì)拋出NPE

ImmutableMap的使用場(chǎng)景:

適合

1、確定性的配置, 比如根據(jù)不同的key值得到不同的請(qǐng)求url

2、寫單元測(cè)試

不適合

1、key, value為未知參數(shù), 可能有null產(chǎn)生的情況

guava中ImmutableMap使用示例及好處

ImmutableMap是不可變的,線程安全的;它可以創(chuàng)建一些常量的映射鍵值對(duì);他提供了很多的組合鍵值對(duì)的方法,源碼中使用了一個(gè)靜態(tài)內(nèi)部類來組裝構(gòu)建ImmutableMap,靜態(tài)內(nèi)部類作為外部類的輔助構(gòu)建ImmutableMap,內(nèi)部使用final聲明了一個(gè)ArrayList變量。

public static class Builder<K, V>{
     final ArrayList<Map.Entry<K, V>> entries = Lists.newArrayList();
    public Builder() {}
    public Builder<K, V> put(K key, V value)
    {
      this.entries.add(ImmutableMap.entryOf(key, value));
      return this;
    }
    public Builder<K, V> put(Map.Entry<? extends K, ? extends V> entry)
    {
      K key = entry.getKey();
      V value = entry.getValue();
      if ((entry instanceof ImmutableEntry)) {
        Preconditions.checkNotNull(key);
        Preconditions.checkNotNull(value);
        Map.Entry<K, V> immutableEntry = entry;
        this.entries.add(immutableEntry);
      }
      else
      {
        this.entries.add(ImmutableMap.entryOf(key, value));
      }
      return this;
    }
    public Builder<K, V> putAll(Map<? extends K, ? extends V> map)
    {
      this.entries.ensureCapacity(this.entries.size() + map.size());
      for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) {
        put(entry.getKey(), entry.getValue());
      }
      return this;
    }
    public ImmutableMap<K, V> build()
    {
      return fromEntryList(this.entries);
    }
    private static <K, V> ImmutableMap<K, V> fromEntryList(List<Map.Entry<K, V>> entries)
    {
      int size = entries.size();
      switch (size) {
      case 0: 
        return ImmutableMap.of();
      case 1: 
        return new SingletonImmutableBiMap((Map.Entry)Iterables.getOnlyElement(entries));
      }
      Map.Entry<?, ?>[] entryArray = (Map.Entry[])entries.toArray(new Map.Entry[entries.size()]);
      return new RegularImmutableMap(entryArray);
    }
  }

之前我們判斷取值結(jié)果可以使用if else形式:

int a = 1;
        if(a == 1) {
            System.out.println(a);
        } else {
            System.out.println(a);
        }

或者使用switch方式:

 int a = 1;
        switch (a) {
        case 1:
            System.out.println(a);
            break;
        case 2:
            System.out.println(a);
        default:
            System.out.println(a);
            break;
        }

現(xiàn)在可以使用ImmutableMap集合來組裝鍵值對(duì),這樣的組合方式既簡(jiǎn)單又省去了大量多余的代碼:

ImmutableMap<String, Object> map = ImmutableMap .<String, Object>builder()
         .put("1", "1")
         .put("2", "2")
         .put("3", "3")
         .build();
ImmutableMap<String, String> map1 = ImmutableMap .<String, String>of("1", "2");

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

相關(guān)文章

  • 并發(fā)編程之Java內(nèi)存模型volatile的內(nèi)存語義

    并發(fā)編程之Java內(nèi)存模型volatile的內(nèi)存語義

    這篇文章主要介紹了并發(fā)編程之Java內(nèi)存模型volatile的內(nèi)存語義,理解volatile特性的一個(gè)好辦法是把對(duì)volatile變量的單個(gè)讀/寫,看成是使用同一個(gè)鎖對(duì)單個(gè)讀/寫操作做了同步。下面我們一起進(jìn)入文章看看具體例子吧,需要的小伙伴可以參考下
    2021-11-11
  • Spring MVC通過添加自定義注解格式化數(shù)據(jù)的方法

    Spring MVC通過添加自定義注解格式化數(shù)據(jù)的方法

    這篇文章主要給大家介紹了關(guān)于Spring MVC通過添加自定義注解格式化數(shù)據(jù)的方法,文中先對(duì)springmvc 自定義注解 以及自定義注解的解析進(jìn)行了詳細(xì)的介紹,相信會(huì)對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼

    jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼

    這篇文章主要介紹了jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java微信公眾號(hào)推送模版消息的步驟示例詳解

    Java微信公眾號(hào)推送模版消息的步驟示例詳解

    模板消息是一種向用戶發(fā)送通知的服務(wù),廣泛用于訂單狀態(tài)更新、服務(wù)提醒等場(chǎng)景,下面,我將詳細(xì)介紹如何使用Java結(jié)合微信官方提供的API來實(shí)現(xiàn)模板消息的推送,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • springboot實(shí)現(xiàn)圖片上傳與下載功能

    springboot實(shí)現(xiàn)圖片上傳與下載功能

    這篇文章主要為大家詳細(xì)介紹了后端spring項(xiàng)目經(jīng)常要做的功能,實(shí)現(xiàn)圖片上傳和下載,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • 生產(chǎn)者消費(fèi)者模型ThreadLocal原理及實(shí)例詳解

    生產(chǎn)者消費(fèi)者模型ThreadLocal原理及實(shí)例詳解

    這篇文章主要介紹了生產(chǎn)者消費(fèi)者模型ThreadLocal原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 關(guān)于SpringBoot配置文件加載位置的優(yōu)先級(jí)

    關(guān)于SpringBoot配置文件加載位置的優(yōu)先級(jí)

    這篇文章主要介紹了關(guān)于SpringBoot配置文件加載位置的優(yōu)先級(jí),我們也可以通過spring.config.location來改變默認(rèn)的配置文件位置,項(xiàng)目打包好后,我們可以通過命令行的方式在啟動(dòng)時(shí)指定配置文件的位置,需要的朋友可以參考下
    2023-10-10
  • Java接口DAO模式代碼原理及應(yīng)用詳解

    Java接口DAO模式代碼原理及應(yīng)用詳解

    這篇文章主要介紹了Java接口DAO模式代碼原理及應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • @Transactional遇到try catch失效的問題

    @Transactional遇到try catch失效的問題

    這篇文章主要介紹了@Transactional遇到try catch失效的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java創(chuàng)建型設(shè)計(jì)模式之單例模式

    Java創(chuàng)建型設(shè)計(jì)模式之單例模式

    Java單例模式是一種設(shè)計(jì)模式,它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)??梢允褂枚喾N方式實(shí)現(xiàn)單例模式,如餓漢式、懶漢式、雙重檢查鎖定、靜態(tài)內(nèi)部類、枚舉等,每種方式都有其優(yōu)缺點(diǎn),需要根據(jù)具體情況選擇使用
    2023-05-05

最新評(píng)論

鞍山市| 宣威市| 东宁县| 黎平县| 隆林| 江永县| 桐梓县| 合作市| 汝州市| 开封县| 政和县| 洪泽县| 古交市| 阿克苏市| 莱西市| 大丰市| 文安县| 布尔津县| 五寨县| 米脂县| 蒙阴县| 洛阳市| 历史| 梁河县| 赣州市| 大厂| 登封市| 淮南市| 江津市| 柳林县| 红原县| 大同市| 韶山市| 麦盖提县| 南昌市| 洱源县| 容城县| 化州市| 承德市| 明溪县| 洛宁县|