Java 8按值bean的字段比较map

时间:2017-09-13 18:40:40

标签: java java-8 sortedmap

如何创建一个按值&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()));

也许第二种可能是正确的解决方案,有人知道更好的解决方案,不需要创建其他地图吗?

0 个答案:

没有答案