我目前在尝试对Map<String, IncreaseDetails>
进行排序时遇到一些问题,其中IncreaseDetails
只是一个包含几个字段的自定义数据结构。
到目前为止,我已经非常清楚地理解使用TreeMap
是非常不鼓励的,因为TreeMap应该按KeySet而不是实际值进行排序。
因此我尝试切换到HashMap
和LinkedHashMap
,只需调用
Collections.sort(map,comparator)
似乎没有做到这一点。从Java 8开始,我计划尝试使用Stream API,但我不太了解它。
到目前为止,我的比较器看起来像这样:
import java.util.Comparator;
import java.util.Map;
public class CompTool implements Comparator<Float> {
Map<String, IncreaseDetails> unsortedMap;
public CompTool(Map<String, IncreaseDetails> unsortedMap)
{
this.unsortedMap = unsortedMap;
}
public int compare(Float countryOne, Float countryTwo)
{
Float countryOneValue = unsortedMap.get(countryOne).getRealIncrease();
Float countryTwoValue = unsortedMap.get(countryTwo).getRealIncrease();
return countryTwoValue.compareTo(countryOneValue);
}
}
任何建议都会非常受欢迎,因为我发现了很多类似的问题或视频,但对我目前的情况没有太多帮助。
答案 0 :(得分:1)
你的问题有点不清楚。我假设您要按unsortedMap
中相反的顺序排列getRealIncrease
条目。这可以通过创建原始地图条目流,将结果排序并收集到保留插入顺序的LinkedHashMap
来完成:
Map<String, IncreaseDetails> sortedMap = unsortedMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(
(Comparator.comparing(IncreaseDetails::getRealIncrease).reversed())))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(a, b) -> a,
LinkedHashMap::new));