如何创建一个按值&bean的字段进行比较的有序地图。 Map键是Integer,value是Car。 我想用汽车的名字来比较它不仅包含字母。
这样的事情:(它不起作用,只是一个坏例子)
Comparator<Car> carNameComparator = new Comparator<Car>() {
@Override
public int compare(Car c1, Car c2) {
return c1.getName().compareToIgnoreCase(c2.getName());
}
};
SortedMap<Integer,Car> carMap = new TreeMap<>(carNameComparator);
第二次尝试:
Map<Integer, Car> carMap = new HashMap<>();
carMap.put(1, car1);
carMap.put(2, car2);
Map<Integer, Car> sortedByValue = carMap.entrySet().stream()
.sorted(Map.Entry.<Integer, Car> comparingByValue(carNameComparator))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
sortedByValue.forEach((k,c)->System.out.println("Key : " + k + " Value : " + c.getName()));
也许第二种可能是正确的解决方案,有人知道更好的解决方案,不需要创建其他地图吗?