【问题标题】:I need to iterate and compute Nested Map<key, someObjectArray[]>我需要迭代和计算嵌套 Map<key, someObjectArray[]>
【发布时间】:2019-02-12 19:02:27
【问题描述】:

我需要使用 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 来实现它

【问题讨论】:

    标签: java lambda java-8 java-stream


    【解决方案1】:
    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) -&gt; right 部分。但是由于在您现有的代码中,您有 response.put(key, result); 我会保留它以符合这一点。

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

    【讨论】:

    • 检查时我可以看到以下错误消息。你能帮忙吗? {无法推断 的类型参数 collect(Collector super T,A,R>)}
    • Eugene,我稍作修正并格式化了细节。如果其中任何一个与您的意图相冲突,请随时回滚。 @mani 尝试更新的代码。它应该工作。
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2018-05-15
    • 2015-09-25
    • 1970-01-01
    • 2016-05-20
    • 2013-05-09
    • 2018-08-23
    相关资源
    最近更新 更多