作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你们能帮我看看如何得到 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/
我是一名优秀的程序员,十分优秀!