【发布时间】:2020-01-28 08:50:39
【问题描述】:
每个人。
我在尝试合并两个地图Map<String, LocalDateTime> 时遇到了问题。 IDE 显示编译错误:
不能从静态上下文中引用非静态方法
问题是我需要将它们合并到一个具有不同参数作为值的新值中,在这种情况下,我需要计算第一张地图的 LocalDateTime 和第二张地图的 LocalDateTime 之间的差异,因此结果应该是Map<String, Long>
Map<String, Long> result = Stream.concat(logStartTimeMap.entrySet().stream(), logEndTimeMap.entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(value1, value2) -> new Long(ChronoUnit.NANOS.between(value1,value2))));
我在 Map.Entry::getKey、Map.Entry::getValue 行中遇到错误。
另一个在ChronoUnit.NANOS.between(value1,value2) 行中,因为 IDE 认为 value1 和 value2 是 Object 类型而不是 Temporal。这很奇怪,因为之前我在结果 Map 中选择了不正确的参数类型时遇到了这个错误。不过这里没关系,ChronoUnit.NANOS.between(value1,value2) 返回 Long,Map 结果有 Long 作为参数。
【问题讨论】:
-
如果另一张地图中不存在该键怎么办?那么如何计算差异呢?两张地图中的键是否相同?
-
错误很明显。您不能将
LocalDateTime和Long差异都作为地图中的值。 value 和 mergeFunction 应该相互符合,并且在您的情况下该条件不成立。 -
您能否给我一个提示,如何让它们相互遵守?
-
在不知道上述问题的答案的情况下,如何给您提示?
-
我在两张地图中都有相同的键。数学键必须在第二张地图中。这样就消除了没有匹配键的情况
标签: java lambda collections java-8 java-stream