[英]Transform a list of maps to a map that uses ImmutablePair with Java 8 streams
如何重写这种旧样式的代码以使用Java 8流? 我知道可以用一行流代码来完成。
Map<String, ImmutablePair<Double, Double>> dataCache = new LinkedHashMap<>()
List<Map<String, Object>> data = new ArrayList<>();
for(Map<String, Object> rec : data) {
String code = (String) rec.get("code");
Double x0 = (Double) rec.get("x0");
Double x1 = (Double) rec.get("x1");
dataCache.put(code, new ImmutablePair<>(x0, x1));
}
本质上,该想法是将记录的通用列表重新映射为结构更清晰的哈希查找。
Map<String, ImmutablePair<Double, Double>> dataCache = data.stream()
.collect(
Collectors.toMap(
rec -> (String) rec.get("code"),
rec -> new ImmutablePair<>(
(Double) rec.get("x0"), (Double) rec.get("x1"))));
如果您关心地图的实现,则可能需要
Map<String, ImmutablePair<Double, Double>> dataCache = data.stream()
.collect(
Collectors.toMap(
rec -> (String) rec.get("code"),
rec -> new ImmutablePair<>(
(Double) rec.get("x0"), (Double) rec.get("x1")),
(p1, p2) -> { throw new IllegalArgumentException(); },
LinkedHashMap::new));
由于您只需要一行流代码:
Map<String, ImmutablePair<Double, Double>> dataCache = data.stream().collect(Collectors.toMap(rec -> (String) rec.get("code"), rec -> new ImmutablePair<>((Double) rec.get("x0"), (Double) rec.get("x1")), (a, b) -> b, LinkedHashMap::new));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.