为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

弑天下 2022-06-15 16:42:42
我需要使用 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 functionalityList<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 来实现它
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

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                                          ))

如果您确定不会有重复项,则可以省略该(left, right) -> right部分。但是,由于在您现有的代码中,您让response.put(key, result);我保持它符合这一点。

这里的要点是Map::put它将覆盖您在 中已有的先前值Map,而Collectors::toMap 没有合并的 a 将引发异常。另一方面(left, right) -> right,它的行为就像put.


查看完整回答
反对 回复 2022-06-15
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信