我試圖篩選,並通過這樣做,減少List<Map<String, Object>>
到List<String>
與Java8新的lambda表達式:減少多陣列列表
List<Map<String, Object>> myObjects = new ArrayList<>();
myObjects.stream()
.filter(myObject-> myObject.get("some integer value").equals(expectedValue))
// myObject.get("some attribute") == ["some string", "maybe another string"]
.map(myObject-> myObject.get("some attribute"))
.collect(Collectors.toList());
結果是一個列表,但我想所有的字符串內結合數組到結果List<String>
。
要澄清,這是目前我得到的結果是:
ArrayList{["some string"], ["another string"]}
但我想這一點:
ArrayList{"some string", "another string"}
有人可以給我一個提示,其中一部分,我不得不降低String[]
到String
?我猜想它在.map()
部分,但我不知道我會在那裏改變。
編輯:
那怎麼List<Map<String, Object>> myObjects
可用於測試目的而產生的:
List<Map<String, Object>> myObjects = new ArrayList<>();
Map<String, Object> myObject = new HashMap<>();
myObject.put("some integer value", 1);
String[] theStringIWant = new String[1];
theStringIWant[0] = "Some important information I want";
myObject.put("some attribute", theStringIWant);
myObjects.add(myObject);
,看起來像這樣:
List<MyObject{"some attribute": 1}>
注:這只是一個例子來自我的單元測試。該列表通常包含多個元素,每個地圖都有更多的屬性,而不僅僅是some attribute
。
很難說沒有看到你原來'Map',但你可能需要'.flatmap(myObject->((List)myObject.get(「list」))。stream())' –
如果你給我幾分鐘時間,我可以提供一個更好的例子。 :) – Peter
如果我嘗試這個我得到一個'java.lang.ClassCastException:[Ljava.lang.String;不能轉換爲java.util.List' – Peter