我有一个包含日期作为键和(另一个字符串作为键和列表作为值的映射)作为值的映射。 Map<LocalDate, Map<String, List<FlexiServer>>>
,我想填充另一个以 String 作为键、以 double 作为值的映射。 FlexiServer的内容是
public class FlexiServer {
private String serverNumber;
private Double quantity;
private Integer level;
private String parentServer;
}
所以,基本上我想首先从外部映射迭代以获取内部映射,然后迭代内部映射以获取 FlexiServer 列表并填充以服务器编号作为键、数量列表作为值的新映射。我如何使用 java 8 流来做到这一点?
我尝试使用 for 循环,但我想使用 Java 流替换它。
if(data.isPresent()) {
for(Map.Entry<LocalDate, Map<String, List<FlexiServer>>> entry : data.get().entrySet()) {
for(Map.Entry<String, List<FlexiServer>> innerEntry : entry.getValue().entrySet()) {
for(FlexiServer dto : innerEntry.getValue()) {
dailyRequirements.computeIfAbsent(dto.getserverNumber(),
k -> new ArrayList<>()).add(dto.getQuantity());
}
}
}
}
最佳答案
只需从外部映射和内部映射中获取值,然后使用 Collectors.groupingby
Map<String, List<Double>> result = map.values()
.stream()
.map(Map::values)
.flatMap(Collection::stream)
.flatMap(List::stream)
.collect(Collectors.groupingBy(FlexiServer::getServerNumber, Collectors.mapping(FlexiServer::getQuantity, Collectors.toList())));
关于java - 使用java 8流迭代map的map内的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60549472/