第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

設(shè)置嵌套在地圖中的地圖的值

設(shè)置嵌套在地圖中的地圖的值

楊__羊羊 2023-06-14 16:28:53
在我的一個項目中,我嘗試在傳遞給參數(shù)的嵌套地圖中設(shè)置值并返回更新的地圖。問題是:假設(shè)我不知道地圖結(jié)構(gòu),如何在嵌套地圖的給定路徑中設(shè)置值?我試圖做到這一點。我試圖遞歸調(diào)用set方法但無濟于事,該方法沒有返回 {age=1, human={lives=3, deaths=2}},而是返回 {deaths=2} 或null. 但是,請注意,這是我無數(shù)次嘗試中的一次。這是我的一種方法(其他方法已刪除):@SuppressWarnings("unchecked")    private static Map<Object, Object> setNested(YamlParser parser, List<String> paths, String key, Object value, Map<Object, Object> previousMap, int loops) {        Object found = parser.getObject(paths);        if (!(found instanceof Map))            return previousMap; // path is not nested        Map<Object, Object> theMap = (Map<Object, Object>) found;        theMap.put(key, value);        // .... ?        System.out.println(theMap);        return setNested(parser, paths, key, theMap, theMap, loops + 1);    }
查看完整描述

2 回答

?
慕碼人8056858

TA貢獻1803條經(jīng)驗 獲得超6個贊

添加所有缺失的中間映射的版本更簡單:


    private static Map<String, Object> setNested(Map<String, Object> map, List<String> keys, Object value) {

      String key = keys.get(0);

      List<String> nextKeys = keys.subList(1, keys.size());

      Object newValue;

      if (nextKeys.size() == 0) {

        newValue = value;

      } else if (!map.containsKey(key)) {

        newValue = setNested(new LinkedHashMap<>(), nextKeys, value);

      } else {

        newValue = setNested((Map<String, Object>) map.get(key), nextKeys, value);

      }

      Map<String, Object> copyMap = new LinkedHashMap<>(map);

      copyMap.put(key, newValue);

      return copyMap;

    }


查看完整回答
反對 回復(fù) 2023-06-14
?
斯蒂芬大帝

TA貢獻1827條經(jīng)驗 獲得超8個贊

我看不出YamlParser這個例子有什么用,我也不知道你到底想做什么。我認為,這是關(guān)于制作一個新地圖,其中復(fù)制了中間地圖和最終(葉)地圖,并且新的葉子地圖具有新值。


如果這不是您所需要的,您可以隨意修改它。也許它會提示您如何實現(xiàn)自己的方法:


public class Test {


      private static Map<String, Object> setNested(Map<String, Object> map, List<String> keys, Object value) {

        String key = keys.get(0);

        List<String> nextKeys = keys.subList(1, keys.size());

        if (nextKeys.size() == 0) {

          Map<String, Object> copyMap = new LinkedHashMap<>((Map) map);

          copyMap.put(key, value);

          return copyMap;

        } else if (!map.containsKey(key)) {

          return map;

        } else {

          Map<String, Object> copyMap = new LinkedHashMap<>((Map) map);

          Map<String, Object> nextMap = (Map<String, Object>) map.get(key);

          copyMap.put(key, setNested(nextMap, nextKeys, value));

          return copyMap;

        }

      }


      public static void main(String[] args) {

        Map<String, Object> map1 = new LinkedHashMap<>();

        Map<String, Object> map2 = new LinkedHashMap<>();

        map2.put("lives", 3);

        map2.put("deaths", 2);

        map1.put("age", 1);

        map1.put("human", map2);

        System.out.println(map1);


        map1 = setNested(map1, Arrays.asList("human", "deaths"), 7);

        System.out.println(map1);


      }

    }

注意:此方法可以在最低級別的映射中插入新鍵,但不能在中間映射中插入。


查看完整回答
反對 回復(fù) 2023-06-14
  • 2 回答
  • 0 關(guān)注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號