我正在尝试使用流的概念来处理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个类,它将在下面的方法中用作列表。
现在我应该处理这个映射,并使用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.发布于 2019-02-11 07:42:31
假设
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())));https://stackoverflow.com/questions/54622139
复制相似问题