【发布时间】:2019-08-21 15:25:13
【问题描述】:
我有一些代码需要帮助...我正在尝试使用两个地图作为源并同时使用 java lambdas 构建地图
Map<String, List<String>> motorsMapping = new HashMap<>();
motorsMapping.put("CAR", Collections.singletonList("AUDI"));
motorsMapping.put("CAR_AND_BIKE", Arrays.asList("AUDI", "BMW"));
motorsMapping.put("BIKE", Collections.singletonList("BMW"));
Map<String, List<String>> models = new HashMap<>();
models.put("AUDI", Arrays.asList("A1", "Q2"));
models.put("BMW", Arrays.asList("X1", "X5"));
motorsMapping.keySet().forEach(key -> {
Map<String, List<String>> result = new HashMap<>();
result.put(key, new ArrayList<>());
motorsMapping.get(key).forEach(value -> models.getOrDefault(value, Collections.emptyList()).forEach(property -> result.get(key).add(property)));
});
我可以使用您在上面看到的 foreach 来做到这一点,但我试图使用 lambdas 来做到这一点......像这样
Map<String, List<String>> collected = motorsMapping
.entrySet()
.stream()
.map(entry -> {
return entry.getValue()
.stream()
.map(key -> models.getOrDefault(key, Collections.emptyList()))
.flatMap(List::stream)
.collect(Collectors.groupingBy(entry.getKey(), Collectors.toList()));
}
)...
我想要的输出是这样的
CAR -> A1, Q2
BIKE -> X1, X5
CAR_AND_BIKE -> A1, Q2, X1, X5
但我无法理解它
【问题讨论】:
标签: java lambda java-8 java-stream collectors