List<Map<String, Object>> list =new ArrayList();
Map<String, Object> map1 =new HashMap();
List<String> values =new ArrayList();
values.add("TEST")
values.add("TEST1")
map1.put("level",values);
Map<String, Object> map2 =new HashMap();
List<String> values2 =new ArrayList();
values2.add("TEST2")
values2.add("TEST3")
map2.put("level",values2);
list.add(map1);
list.add(map2);
我想要像扁平字符串值列表那样的结果
List<String> values =["TEST","TEST1","TES2","TEST3"]
List<Object> collect = list
.stream()
.flatMap(x -> x.entrySet().stream())
.map(Map.Entry::getValue)
.flatMap(x -> {
if (x instanceof Collection<?>) {
return ((Collection<?>) x).stream();
} else {
return Stream.of(x);
}
}
)
.collect(Collectors.toList());
我更喜欢对 lambda 的方法引用:
List<String> values = list.stream() // a stream of Maps
.map(Map::values) // a stream of List<String>
.flatMap(List::stream) // a stream of String
.collect(toList());