Java 8 - 带列表的平面地图

Bre*_*een 7 java lambda java-8

我有一个像Map这样的结构<String,List<Map<String,Object>>.我想将一个函数应用于地图,如下所示.该方法接受一个键并使用<String,Object>列表的Map .每个键<String,Object>在列表中都有几个Map .如何将处理方法应用于Map的每个值的地图键<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);
Run Code Online (Sandbox Code Playgroud)
List<Result> list = new ArrayList<>();
map.forEach(key,value) -> {
  value.forEach(innerVal -> {
    Result r=p.process(key,innerVal);
    list.add(r):
  });
});
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 6

从你的代码看来,你想申请process整个Map,所以你可以这样做:

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