2016-03-03 15 views
8

Jak posortować listę list w Javie w porządku leksykograficznym za pomocą funkcji Collections.sort() lub innej metody sortowania?Lista sortowania w języku Java

private List<List<Integer>> possiblePoles = setPoles();  
System.out.println(possiblePoles) 
[[1, 3, 5], [1, 2, 3]] 
+0

Poprzez wdrożenie rodzaju przez siebie? – MikeCAT

+0

Nie, może to być funkcja Java. – Nic

+0

http://stackoverflow.com/questions/2999129/how-do-i-sort-an-arraylist-lexicographically – developer033

Odpowiedz

9

Trzeba będzie zaimplementować własną Comparator klasę i przekazać w instancji do Collections.sort()

class ListComparator<T extends Comparable<T>> implements Comparator<List<T>> { 

    @Override 
    public int compare(List<T> o1, List<T> o2) { 
    for (int i = 0; i < Math.min(o1.size(), o2.size()); i++) { 
     int c = o1.get(i).compareTo(o2.get(i)); 
     if (c != 0) { 
     return c; 
     } 
    } 
    return Integer.compare(o1.size(), o2.size()); 
    } 

} 

Następnie sortowania jest łatwe

List<List<Integer>> listOfLists = ...; 

Collections.sort(listOfLists, new ListComparator<>()); 
+0

Jeszcze lepiej: Ponieważ Java używa typu wymazania, można utworzyć pojedynczą instancję ListComparator i wykonać niebezpieczne rzuty (to bezpaństwowców i tak). – Nayuki

+0

@Nayuki, wolałbym tego nie robić, ponieważ nie chcę nosić tego przykładu na zawsze, tylko dlatego, że użyłem go raz. Obciążenie pamięci może być niewielkie, ale także koszt utworzenia obiektu. Ale każdy może robić, co tylko chce ^^ – MartinS

+0

Użyłbym 'int c = ObjectUtils.compare (o1.get (i), o2.get (i))'. W przeciwnym razie otrzymasz NPE, jeśli 'o1.get (i) == null'. ('ObjectUtils' pochodzi z biblioteki common Apache) –

Powiązane problemy