我是 Java 新手,我Object Array從 API 得到了如下所示。
實際上,Object串列中的每個都是一個Map.
我想洗掉每個Map.
以下是我嘗試過的,但我無法解決問題:
remove() is not defined for object
這樣做的適當方法是什么?
Object Array:
List<Object> fruit: [{apple=3, orange=4}, {apple=13, orange=2}, {apple=1, orange=8}]
Code I tried:
List<Object> newList = fruit.stream().filter(x->x.getKey().equals("orange")).collect(Collectors.toList());
And
List<Object> newList = fruit.forEach(x->{
x.remove();
}););
Remark:
API Resp: [{country=US, fields={apple=3, orange=4},{country=CAD, fields={apple=1, orange=4}]
List<Object> fruit= apiResult.stream()
.map(x->x.get("fields"))
.collect(Collectors.toList());
uj5u.com熱心網友回復:
這將從地圖中洗掉橙子:
fruit.forEach(x -> ((Map<?,?>) x).remove("orange"));
(更復雜的是,您想創建一個新串列,其中包含洗掉了橘子的新地圖。但這不是您的嘗試似乎正在做的事情。)
您在所有嘗試中都缺少的一件事是您需要將串列元素轉換為Map.
但更清潔的解決方案是將 定義List<Object> fruit為List<Map<String, Integer>> fruit。
在你問的問題標題中:
如何將物件陣列轉換為地圖陣列并洗掉地圖中的鍵?
簡短的回答是你不能。已創建為 an 的陣列物件Object[]不能強制轉換為Map<?, ?>[]。但正如您所看到的,您不需要這樣做來解決您的問題。
uj5u.com熱心網友回復:
如何將物件陣列轉換為映射陣列
似乎您混淆了陣列和ArrayList.
陣列是一個資料容器,它占用一個連續的記憶體塊并具有固定的長度。
ArrayList是動態陣列資料結構的內置實作,它由陣列支持,但與普通陣列相反,它能夠增加大小并提供許多有用的行為。
如果你的背景是 JavaScript,那么ArrayList更接近 JavaScript 中的陣列。
關于鑄造,正如我所說,你不應該Object首先使用。您的串列應該是型別,List<Map<String, Integer>>那么就不會有問題。
如果我們嘗試將此串列物件轉換為其實際型別 - 不走運:
List<Map<String, Integer>> fruitConverted = (List<Map<String, Integer>>) fruit; // that would not compile, the compiler will not allow that
通過使用所謂的row type的中間變數來繞過它來欺騙編譯器。
List rowList = fruit;
List<Map<String, Integer>> fruitConverted = rowList;
在這種情況下,編譯器會發出警告,但代碼會編譯。但是您應該知道,編碼的各種不良陳舊。
有關型別轉換的更多資訊,請參閱。
我想洗掉每個字典中的一個鍵
在您的代碼中,您正在嘗試以不同的方式創建一個新串列,因此您似乎希望保持串列的先前版本與所有地圖完好無損。
如果是這樣,您可以使用流為每個地圖創建每個條目的副本(不包括帶有不想要的鍵的條目"orange"),然后收集到一個串列中。
public static void main(String[] args) {
List<Object> fruit =
List.of(Map.of("apple", 3, "orange", 4),
Map.of("apple", 13, "orange", 2),
Map.of("apple", 1, "orange", 8));
List<Map<String, Integer>> newList = fruit.stream()
.map(map -> ((Map<String, Integer>) map).entrySet().stream()
.filter(entry -> !entry.getKey().equals("orange")) // will retain entries with key that not equal to "orange"
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
.collect(Collectors.toList());
System.out.println(newList);
}
輸出:
[{apple=3}, {apple=13}, {apple=1}]
但如果您不需要以前版本的串列,則可以forEach()使用remove().
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481246.html
