Java 8 -Flatten Map with Lists

时间:2017-12-13 02:14:42

标签: java lambda java-8

我有一个地图<String,List<Map<String,Object>>等结构。我想将一个函数应用于地图,如下所示。该方法需要一个密钥并使用一个  映射列表的<String,Object>。每个密钥在列表中都有几个Map <String,Object>。如何将处理方法应用于地图<String,Object>的每个值的地图键?我能够使用forEach循环(见下文),但我觉得这不是以功能方式解决问题的最佳方法。

TypeProcessor p=new TypeProcessor.instance();

//Apply this function to the key and each map from the list
// The collect the Result returned in a list.
Result process(String key, Map<String,Object> dataPoints);
List<Result> list = new ArrayList<>();
map.forEach(key,value) -> {
  value.forEach(innerVal -> {
    Result r=p.process(key,innerVal);
    list.add(r):
  });
});

2 个答案:

答案 0 :(得分:4)

您的代码似乎要为整个process应用Map,因此您可以这样做:

 List<Result> l = map.entrySet()
            .stream()
            .flatMap(e -> e.getValue().stream().map(value -> process(e.getKey(), value)))
            .collect(Collectors.toList());

答案 1 :(得分:2)

好吧,假设This is just some test text. Many thanks, James Jones Some company 51 made up street The world 包含map,您不需要任何key。只需从外部foreach获取值,将其流式传输,映射到新对象并收集到map

List