【发布时间】:2017-03-18 09:04:54
【问题描述】:
我正在尝试使用 Kotlin 以更实用的样式迭代嵌套的 Hashmap。特别是,我有两个 HashMap 实例(均为Map<String, Integer> 类型),我想根据某些标准匹配它们的值。这是我想要实现的Java方法:
Map<Integer, Integer> pairs = new LinkedHashMap<>();
for (Map.Entry<String, Integer> oldImages : startingImageMap.entrySet()) {
for (Map.Entry<String, Integer> newImages : finalImageMap.entrySet()) {
Integer oldImageVal = oldImages.getValue();
Integer newImageVal = newImages.getValue();
boolean containsNewType = pairs.containsKey(newImageVal) &&
pairs.get(newImageVal).intValue() == oldImageVal.intValue();
boolean urlsMatch = newImages.getKey().equals(oldImages.getKey());
if (!containsNewType && urlsMatch) {
pairs.put(oldImageVal, newImageVal);
}
}
}
return pairs;
这是我在 Kotlin 中的等效功能尝试:
private val swapPairs: Map<Int, Int>
get() {
val pairs = LinkedHashMap<Int, Int>()
startingImageMap.forEach {
val finalImageMap = finalImageMap.filterValues {
val containsNewType = pairs.containsKey(it) && pairs[it] == startingImageMap[it]
val urlMatch = it == startingImageMap[it]
return !containsNewType && urlsMatch
}.values.first()
}
return pairs
}
我不知道如何使用filterValues 正确执行此操作。
Kotlin 中的正确解决方案是什么样的?
【问题讨论】:
标签: java functional-programming hashmap kotlin