我正在尝试使用Streaming概念在Java中处理HashMap。
问题:
public class SourceClass{
private String EmpId;
private String EmpName;
}
public class ResultClass{
private String EmpId;
private String EmpAddress;
private String EmpMartialStatus;
private Integer EmpAge;
}
我有2个类,将在以下方法中用作列表。
现在,我应该处理此Map,并使用SourceClass值获取需要拥有其主数据的ResultClass值。因此响应应该如下。
sourceClasseMap = { "doj1",
<[EmpId1, EmpName1],
[EmpId1, EmpName1]>
}
我的结果应该像
return ResultClassMap = { "doj1",
<[EmpId1, EmpAddress1, EmpMartialStatus1, EmpAge1],
[EmpId2, EmpAddress2, EmpMartialStatus2, EmpAge2]>
}
方法看起来像
public Map<String, List<ResultClass>> getStausesForDevices(Map<String, SourceClass[]> sourceClasseMap){
Expecting to use Java 8 Stream concept.
Expecting to use Java 8 Stream concept.
答案 0 :(得分:1)
假设
ResultClass = jedis.get(SourceClass.EmpId1 + SourceClass.EmpName1)
如果您不受java8的限制,那么可以使用java9中的flatMapping
方法进行流传输。
public Map<String, List<ResultClass>> getStausesForDevices(Map<String, SourceClass[]> sourceClassMap) {
return sourceClassMap.entrySet().stream()
.collect(groupingBy(Map.Entry::getKey,
flatMapping(entry -> Arrays.stream(entry.getValue()),
mapping(source -> jedis.get(source.getEmpId() + source.getEmpName()), toList()))));
}
更新
如果您不能使用java9,那么没有flatMapping
的解决方案:
return sourceClassMap.entrySet().stream()
.collect(toMap(Map.Entry::getKey, entry -> Arrays.stream(entry.getValue())
.map(source -> jedis.get(source.getEmpId() + source.getEmpName()))
.collect(toList())));