我需要使用 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
.
添加回答
举报
0/150
提交
取消