java - Java 1.6 上的 Java Map compute() 示例
问题描述
我必须在 Java 1.6 上工作。我很难转换在 Java 1.8 上运行的以下代码。
Map<String, Double> maksimum = new HashMap<>();
List<Record> records;
for (Record record : records) {
record.getFeatures().forEach((key, value) -> {
maksimum.compute(key, (k1, max) -> max == null || value > max ? value : max);
});
}
我改造的内容如下。我想知道我在哪里做错了。
for(Record rec : records) {
for (Map.Entry<String, Double> entry : rec.getFeatures().entrySet()) {
if (entry.getKey()==null || maksimum.containsKey(entry.getKey())) {
maksimum.replace(entry.getKey(), maksimum.get(entry.getValue()));
}
}
}
解决方案
如果我正确理解您在 Java 8 中的初始代码,您希望将每个键的最大值存储在Map
. 以下是在 Java 6 中应该执行此操作的代码:
Map<String, Double> maksimum = new HashMap<String, Double>();
for (Record record : records) {
for (Map.Entry<String, Double> recordEntry : record.getFeatures().entrySet()) {
String key = recordEntry.getKey();
Double value = recordEntry.getValue();
Double initialValue = maksimum.get(key);
if (initialValue == null) {
maksimum.put(key, value);
} else {
maksimum.put(key, Math.max(value, initialValue));
}
}
}
请注意,replace
您在示例中使用的函数是在 Java 8 中引入的。文档:https ://docs.oracle.com/javase/8/docs/api/java/util/Map.html#replace-KV-
推荐阅读
- angular - 如何通过时刻获取给定年份的给定月份的最后一天
- wordpress - 使用 Lottie 和 wordpress 在悬停时触发动画
- python - 这个极小极大实现有什么问题?
- javascript - 地理图表美国州在显示特定省份时未显示总数
- c# - Visual Studio 中的 Azure Function 样板代码找不到命名空间
- javascript - 如何使用 chartJs 自定义图表?
- c++ - 为什么我对返回值函数的调用不起作用?
- java - 无法计算下拉选择游戏的分数
- python - 错误:MySQL_python-1.2.5-cp27-none-win_amd64.whl 不是此平台支持的轮子
- angular-material - 展开时如何将 mat-expansion-header 放在 mat-expansion-content 的底部