簡體   English   中英

java迭代map <string,list <string>,getordefault方法

[英]java iterate over map< string, list< string> , getordefault method

我有一個<string,List <String type >>的映射,我想要做的是如果列表存在則添加一個字符串來映射值,否則創建一個列表並將其添加到列表並插入map s1s2是字符串。

碼:

Map<String, List<String>> map = new HashMap<>();

map.put(s1,(map.getOrDefault(s1, new LinkedList<String>())).add(s2));

錯誤:

error: incompatible types: boolean cannot be converted to List<String>

這有什么問題!!!

添加列表'map.getOrDefault(s1,new LinkedList())的方法.add(s2)'是返回布爾值,所以你必須在單獨的行中執行

所以試試這樣

    Map< String, List< String>> map = new HashMap<>();

    List<String> list = map.get(s1);
    if(list == null){
      list = new LinkedList<>();
      map.put(s1,list);
    }
    list.add(s2);

如果使用java 8並且需要在單行中做這樣的事情

    map.computeIfAbsent(s1, k -> new LinkedList<>()).add(s2); 

這個電話,

(map.getOrDefault(s1, new LinkedList())).add(s2)

返回一個boolean元,無法將其轉換為List 這就是你得到這個錯誤的原因。

你可以這樣解決,

map.compute(s1, (k, v) -> v == null ? new LinkedList<>() : v).add(s2);

這里的技巧是, map.compute()返回與指定鍵關聯的新值,然后您可以在之后添加s2字符串文字。

Map<String, List<String>> map = new HashMap<>();

// gets the value if it is present in the map else initialze the list
List<String> li = map.getOrDefault(s1,new LinkedList<>());

li.add(s2);

map.put(s1,li); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM