У меня есть этот HashMap:Java: Как использовать компаратор с ArrayList в качестве значений HashMap
HashMap< itemDetails, Pair<ArrayList<itemDetails>, AssociatedInfo>> AssociatedItemCasuaList = new HashMap<>();
где его ключ класса, а его значения состоят из пары (а = ArrayList класса itemDetails, б = класс AssociatedInfo):
class itemDetails {
public ArrayList<Integer> itemId;
public float expectedSupport = 0;
// etc
}
и
class Pair<T, U> {
T a;
U b;
Pair(T a, U b) {
this.a = a;
this.b = b;
}
T getA() {
return a;
}
U getB() {
return b;
}
}
и
class AssociatedInfo {
public int noOfKCasual = 0;
public int AssociateListStart = 0;
public int AssociateListEnd = 0;
}
Я хочу, чтобы отсортировать первую пару из значений HashMap
, который находится в классе ArrayList<Integer> itemId
itemDetails
Я использовал этот компаратор
public class ItemComparator implements Comparator<ArrayList<Integer> >{
@Override
public int compare(final ArrayList<Integer> entry1, final ArrayList<Integer> entry2){
if (entry1 == null && entry2 == null)
return 0;
if (entry1 == null)
return 1;
if (entry2 == null)
return -1;
if (entry1.isEmpty() && entry2.isEmpty())
return 0;
if (entry1.isEmpty())
return 1;
if (entry2.isEmpty())
return -1;
return entry1.get(0).compareTo(entry2.get(0));
}
}
Я не» t умеет писать Collections.sort
if (AssociatedItemCasuaList.containsKey(LHS)) {
AssociatedItemCasuaList.get(LHS).a.add(RHS2);
AssociatedItemCasuaList.get(LHS).b.AssociateListStart = 0;
AssociatedItemCasuaList.get(LHS).b.AssociateListEnd += 1;
AssociatedItemCasuaList.get(LHS).b.noOfKCasual += 1;
} else {
ArrayList<itemDetails> ArrayListRHS = new ArrayList<itemDetails>();
ArrayListRHS.add(RHS2);
AssociatedInfo AttribAssociatedInfo1 = new AssociatedInfo();
AttribAssociatedInfo1.noOfKCasual = 1;
AttribAssociatedInfo1.AssociateListStart = 0;
AttribAssociatedInfo1.AssociateListEnd = 0;
AssociatedItemCasuaList.put(LHS, new Pair(ArrayListRHS, AttribAssociatedInfo1));
}
// Collections.sort(AssociatedItemCasuaList.get(LHS), new ItemComparator());
Обновление: Пример:
AssociatedItemCasuaList < **key**=LHS, **value**=Pair<a, b> >
Пусть ключ = LHS:
LHS.itemId=1
LHS.expectedSupport=87.5
и значения = пара < а, Ь>
Пусть сосредоточимся в a
только в является примером.
a= ArrayList<itemDetails>
Пусть itemDetails RH2
и каждый раз (в цикле) я добавляю RHS2 к ключевым LHS как:
AssociatedItemCasuaList.get(LHS).a.add(RHS2)
здесь RHS2
принимает различные значения каждый раз, когда
RHS2.itemId
RHS2.expectedSupport
до сих пор, у меня нет проблем.
Я хочу, чтобы отсортировать ArrayList в a
(что я наполнен RHS2
) на основе его Itemid
Just проверка: вы переопределили 'equals' и' hashCode' в классе 'itemDetails'? –
Кроме того, что вам нужно делать? Не могли бы вы объяснить «сортировать первую пару значений HashMap, которая является ArrayList itemId в классе itemDetails»? –
Пожалуйста, следуйте соглашениям по кодированию Java: имена типов (классы, интерфейсы, перечисления) всегда начинаются с заглавной буквы. Имена полей, переменных и методов всегда начинаются с строчной буквы. – RealSkeptic