[英]Hashmap receives true instead of ArrayList
因此,事實證明我在工作(我還不是高級開發人員),但突然我意識到我的代碼有問題。 Hashmap接收“ true”,而不是接收在其第一個位置具有一個對象的ArrayList。 作為示例,您可以看到我在說什么,如下所示:
Product item = new Product();
Map rMap = new HashMap();
rMap.put("productsList", new ArrayList().add(item));
經過某些代碼行和對helperMethods的編碼后,我試圖從地圖中檢索該“ productsList”,但我無法這樣做,我不知道為什么,在調試之后我發現當完成PUT時,沒有這樣的列表,只是一個布爾值。 我檢索它的方式如下:
if (rMap.containsKey("productsList")) {
// This IF statement was being skipped because of the Boolean
if (rMap.get("productsList") instanceof ArrayList) {
List<Product> pr = (List) rMap.get("productsList");
}
}
另一方面,我已經知道了這一點(方法更加清晰)並可以按預期的方式進行炒菜:
Product item = new Product();
Map rMap = new HashMap();
List < Product > myList = new ArrayList();
myList.add(item);
rMap.put("productsList", myList);
為了減少創建列表並將對象設置為列表的那兩行代碼,可以采取什么措施? 當然這沒什么大不了的,只是我想使我的編碼更清晰,更直觀。
您可以像這樣使用Arrays#asList方法
map.put("productList", Arrays.asList(item1, item2, item3));
我也建議您使用泛型,以換取類型安全。
Map<String, List<String>> rMap = new HashMap<String, List<String>>();
rMapu.put("productList", Arrays.asList("item1", "item2"));
您可以使用Arrays#asList
而不是new ArrayList().add(item)
,但是返回的固定大小列表可能不是您想要的。
另一種方法是像這樣使用Map#computeIfAbsent
來創建想要的類型並將其添加到地圖的新列表,然后在返回該項目時將其添加到列表中。
Product item = new Product();
Map<String, List<Product>> rMap = new HashMap<>();
rMap.computeIfAbsent("key", s -> new ArrayList<>()).add(item);
另一種方法是使用雙括號初始化語法:
rMap.put("productsList", new ArrayList() {{ add(item); /*may be other code*/ }});
但這有一些副作用(編譯器需要添加其他類)。
開始您的問題。 按照設計,標准Java集合類沒有修改集合並返回修改后的對象的方法(例如StringBuilder.append
)。 所以這個初始化很干凈:
List<Product> myList = new ArrayList();
myList.add(item);
rMap.put("productsList", myList);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.