Java 我需要迭代和计算嵌套映射<;键,someObjectArray[]>;

Java 我需要迭代和计算嵌套映射<;键,someObjectArray[]>;,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我需要用Key和List迭代一个映射,以提供另一种类型的对象。我试着在代码层面上解释 我试过for循环,效果很好。但我喜欢Java8流媒体 public Map<String, List<TestClassResult>> getComputed( Map<String, SourceClass[]> sourceMapObject) { Map<String, List<TestClassResult>> response

我需要用Key和List迭代一个映射,以提供另一种类型的对象。我试着在代码层面上解释

我试过for循环,效果很好。但我喜欢Java8流媒体

public Map<String, List<TestClassResult>> getComputed(
    Map<String, SourceClass[]> sourceMapObject) {

Map<String, List<TestClassResult>> response = new HashMap<>();
// Here goes the functionality
List<TestClassResult> result;
for (Map.Entry<String, SourceClass[]> entry : sourceMapObject.entrySet()) {
      result = new ArrayList<>();
      String key = entry.getKey();
      for (SourceClass value : entry.getValue()) {
        result.add(someMethod(value.id, value.empCode));
      }
      response.put(key, result);
    }
return response;
}

public class SourceClass{
   private String id;
   private String empCode;
}

public class TestClassResult{
   private String empName;
   private String empMartial;
   private int empAge;
}
publicmap-getComputed(
映射源(映射对象){
Map response=newhashmap();
//这就是功能
列出结果;
对于(Map.Entry:sourceMapObject.entrySet()){
结果=新的ArrayList();
String key=entry.getKey();
for(SourceClass值:entry.getValue()){
添加(someMethod(value.id,value.empCode));
}
响应。输入(键、结果);
}
返回响应;
}
公共类SourceClass{
私有字符串id;
私有字符串编码;
}
公共类TestClassResult{
私有字符串名称;
私人字符串;
私营企业;
}
我需要用Java8流和lambda来实现这一点

sourceMapObject.entrySet()
                .stream()
                .collect(Collectors.toMap(
                     Entry::getKey,
                     entry -> Arrays.stream(entry.getValue())
                                   .map(value -> someMethod(value.id, value.empCode))
                                   .collect(Collectors.toList()),
                     (left, right) -> right                                          
))
如果您确定不会有重复项,则可以省略
(左、右)->右部分。但是因为在现有代码中,您有
response.put(key,result)我保存它是为了符合这一点


这里的要点是,
Map::put
将覆盖您在
Map
中已有的值,而没有合并的
Collectors::toMap
将抛出异常。另一方面,使用
(左、右)->right
,它的行为将类似于
put

在检查时,我可以看到以下错误消息。你能帮个忙吗?{无法推断collect(CollectorEugene)的类型参数,我已经做了一些轻微的更正并格式化了详细信息。如果其中任何一个与您的意图相冲突,请随时回滚。@mani请尝试更新的代码。它会起作用的。