在自定义对象的HashMap中查找最小值,其中该映射包含两个具有相同最小值的条目



我遇到了一个非常奇怪的边缘情况-我正在编写一些Java 11代码,以在HashMap中找到最小对象,其中的映射条目如下所示:

Map.Entry<String,MyCustomObject>

这是一个简单的问题,除了我遇到的一个角落的情况——当HashMap包含两个具有相同最小值的对象时——每次执行返回的对象可能不同!

return myMap.entrySet()
.stream().min(Map.Entry.comparingByValue(Comparator.comparing(MyCustomObject::getValue)))
.get().getKey();

似乎发生的情况是,在每次执行时,Map条目的流式传输顺序可能会有所不同,这导致了当Map包含两个具有相同最小值的条目时,结果可能会有所变化(我能够编写一个简单的单元测试来捕捉这个问题(。

我想要的是每次运行代码时总是返回相同的min对象(最后一个遇到的对象(?感谢

您的问题是HashMap不会以任何特定顺序存储其密钥。

看起来您正在寻找一个可以按插入顺序遍历的贴图。尝试使用LinkedHashMap而不是HashMap。这是一个始终按照最初插入其键的顺序遍历的映射。

最新更新