próbuję filtrować i zmniejszenia List<Map<String, Object>>
do List<String>
z Java8 nowych lambdas w ten sposób:Zmniejszyć wiele tablic do listy
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());
Rezultatem jest lista, ale chcę, aby połączyć wszystkie sznurki wewnątrz tablica do wynikowego List<String>
.
Aby wyjaśnić to, jest to wynik Dostaję teraz:
ArrayList{["some string"], ["another string"]}
Ale chcę to:
ArrayList{"some string", "another string"}
Czy ktoś może mi dać wskazówkę, w którym część muszę zmniejszyć String[]
do String
? Zgaduję, że to jest na części .map()
, ale nie wiem, co tam zmienię.
edit:
To jak List<Map<String, Object>> myObjects
mogą być generowane dla celów testowania:
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);
który wygląda tak:
List<MyObject{"some attribute": 1}>
Uwaga: To tylko przykład z mojego unittest. Lista normalnie zawiera więcej niż jeden element, a każda mapa ma więcej atrybutów, a nie tylko some attribute
.
trudno powiedzieć, nie widząc oryginalny 'Map', ale prawdopodobnie need '.flatmap (myObject-> ((Lista) myObject.get (" list ")). stream())' –
Jeśli dasz mi kilka minut, mogę podać lepszy przykład z rzeczywistą listą. :) – Peter
Jeśli spróbuję tego, otrzymuję 'java.lang.ClassCastException: [Ljava.lang.String; nie można rzutować na java.util.List' – Peter