2015-08-28 8 views
0

У меня есть этот 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> itemIditemDetails

Я использовал этот компаратор

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

+0

Just проверка: вы переопределили 'equals' и' hashCode' в классе 'itemDetails'? –

+0

Кроме того, что вам нужно делать? Не могли бы вы объяснить «сортировать первую пару значений HashMap, которая является ArrayList itemId в классе itemDetails»? –

+2

Пожалуйста, следуйте соглашениям по кодированию Java: имена типов (классы, интерфейсы, перечисления) всегда начинаются с заглавной буквы. Имена полей, переменных и методов всегда начинаются с строчной буквы. – RealSkeptic

ответ

0

Игнорируя тот факт, что я не понимаю ни одного слова, что по этому поводу:

public class ItemComparator2 implements Comparator<itemDetails> { 
    Comparator myComp = new ItemComparator(); 
    @Override 
    public int compare(itemDetails a, itemDetails b){ 
    return myComp.compare(a.itemId, b.itemId); 
    } 
} 

// ... 

Collections.sort(AssociatedItemCasuaList.get(LHS).getA(), new ItemComparator2()); 
Смежные вопросы