当 Java 流中有 Map 列表时,如何使用平面映射将 HashMap 键值扁平化为一组

问题描述 投票:0回答:2
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"]
java stream flatmap
2个回答
0
投票
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());

0
投票

我更喜欢对 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());
© www.soinside.com 2019 - 2024. All rights reserved.