繁体   English   中英

将地图列表转换为将ImmutablePair与Java 8流一起使用的地图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM