java - 如何从 lambda 表达式返回新的非抽象 Map?

标签 java lambda java-8

你们能帮我看看如何得到 List<Map<Long, MapDifference> 的结果吗?而不是 List<AbstractMap.SimpleEntry<Long, MapDifference>>

输入是列表。对象有 id 和两个不同的列表对象 - 左和右。我想比较它们并将差异与 id 相关联。然后返回带有 id

的整个 MapDifferences 列表

我有以下代码:

List<AbstractMap.SimpleEntry<Long, MapDifference>> mapDifferences = input
        .stream()
        .map(h -> {
            Optional<Map<String, List<String>>> left = Optional.ofNullable(..Object1.);
            Optional<Map<String, List<String>>> right = Optional.ofNullable(..Object2..);
            MapDifference mapDifference = Maps.difference(left.orElseGet(LinkedTreeMap::new), right.orElseGet(LinkedTreeMap::new));
            return new AbstractMap.SimpleEntry<Long, MapDifference>((long) h.get("property"), mapDifference);
        })
        .collect(Collectors.toList());

最佳答案

首先 Optional::ofNullable 不应该被用来做一个简单的 null 检查。

接下来您可以使用 Collections::singletonMap 并且您的代码如下所示:

List<Map<Long, MapDifference>> mapDifferences = input
  .stream()
  .map(h -> {
    Map<String, List<String>> left = object1 == null ? new LinkedTreeMap<>() : object1;
    Map<String, List<String>> right = object2 == null ? new LinkedTreeMap<>() : object2;
    MapDifference mapDifference = Maps.difference(left, right);
    return Collections.singletonMap((long) h.get("property"), mapDifference);
  })
  .collect(Collectors.toList());

或者如果你想扁平化你的结构并且只有唯一的 property 数字,那么使用:

Map<Long, MapDifference> mapDifferences = input
  .stream()
  .map(h -> {
    Map<String, List<String>> left = object1 == null ? new LinkedTreeMap<>() : object1;
    Map<String, List<String>> right = object2 == null ? new LinkedTreeMap<>() : object2;
    MapDifference mapDifference = Maps.difference(left, right);
    return new AbstractMap.SimpleEntry<>((long) h.get("property"), mapDifference);
  })
  .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

关于java - 如何从 lambda 表达式返回新的非抽象 Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45601606/

相关文章:

c# - 如何验证 lambda 查询是否返回 null

java - 为什么内联 Consumer<ZipEntry> 编译失败但在外部工作?

haskell - 没有因使用 `print' 而产生的 (Show (Int -> Int)) 实例

java - 避免在 Java 8 stream reduce 方法中使用全局变量

java - 如何使用java流过滤List<String,Object>集合?

java - 为什么我可以声明一个泛型数组但不能初始化它?

java - 积分系统存储

java - 硬币兑换 : dynamic programing O(N) complexity

java - pretty-print XML 文件

java - Twitter4j.获取来自国家/地区的用户