猿问

我需要迭代和计算嵌套 Map<key, someObjectArray[]>

我需要使用 Key 和 List 迭代 Map 以提供另一种类型的对象。我试图在代码级别进行解释。


我尝试过使用 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;

}

我需要用 Java 8 流和 lambdas 来实现它


弑天下
浏览 88回答 1
1回答

慕容森

sourceMapObject.entrySet() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toMap( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Entry::getKey, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entry&nbsp;->&nbsp;Arrays.stream(entry.getValue()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(value&nbsp;->&nbsp;someMethod(value.id,&nbsp;value.empCode)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList()), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(left,&nbsp;right)&nbsp;->&nbsp;right&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))如果您确定不会有重复项,则可以省略该(left, right) -> right部分。但是,由于在您现有的代码中,您让response.put(key, result);我保持它符合这一点。这里的要点是Map::put它将覆盖您在 中已有的先前值Map,而Collectors::toMap&nbsp;没有合并的 a 将引发异常。另一方面(left, right) -> right,它的行为就像put.
随时随地看视频慕课网APP

相关分类

Java
我要回答