У меня есть карта, как так:Сортировать карту на основе размера
Map<List<Item>, Double> items = new HashMap<List<Item>, Double>();
Я хотел бы разобраться в этом HashMap на основе размера List<Item>
, где самые крупные из них размера, в первую очередь. Тем не менее, я не забочусь о заказе внутри объектов с одинаковым размером.
До сих пор я пытался использовать TreeSet
так:
SortedSet<Map.Entry<List<Item>, Double>> sortedItems = new TreeSet<Map.Entry<List<Item>, Double>>(
new Comparator<Map.Entry<List<Item>, Double>>() {
@Override
public int compare(
Entry<List<Item>, Double> o1,
Entry<List<Item>, Double> o2) {
return o2.getKey().size() - o1.getKey().size();
}
});
sortedItems.addAll(items.entrySet());
Однако sortedItems
объект занимает лишь один из каждого размера списка. Он обрабатывает списки одинакового размера как дубликаты и игнорирует их. Как я могу исправить эту проблему.
EDIT: Итак, из того, что я могу сказать, когда сравниваются 2 списка одного и того же размера, мой метод compare
возвращает 0
. Это говорит множеству, что записи равны, и они рассматриваются как дубликаты. Поэтому я предполагаю, что единственный способ исправить это - убедиться, что метод сравнения никогда не возвращает 0
. Так что я написал этот код:
@Override
public int compare(
Entry<List<AuctionItem>, Double> o1,
Entry<List<AuctionItem>, Double> o2) {
if (o1.getKey().size() <= o2.getKey().size()) {
return -1;
} else {
return 1;
}
}
Затем ваш компаратор не должен возвращать 0. Возврат 0 означает, что «эти элементы одинаковы», и вы не можете иметь одинаковые элементы на карте. – immibis
@immibis Итак, что я должен вернуть? Может ли это быть чем-то другим, кроме 0 или имеет значение, верну я положительное или отрицательное число? – Ogen
Вам нужно решить, как их сортировать. – immibis