2016-03-03 23 views
8

Java'da listelerin listesini Sort.sort() veya başka bir sıralama yöntemi kullanarak sözcükbilimsel sıraya göre nasıl sıralayabilirim?Java Listeleri Listele Liste Listeleri

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

kolay? – MikeCAT

+0

Hayır, bir Java işlevi olabilir. – Nic

+0

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

cevap

9
Kendi Comparator sınıf uygulamak ve 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()); 
    } 

} 

Sonra ayrımına bir örneğine geçmek zorunda kalacak

kendiniz tür uygulayarak

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

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

Daha da iyisi: Java, tür silme özelliğini kullandığından, tek bir ListComparator örneğini oluşturabilir ve güvenli olmayan dökümler yapabilirsiniz. yine de vatansız. – Nayuki

+0

@Nayuki, bunu yapmayı tercih etmem, çünkü bir kez kullandığım için sonsuza kadar örnek taşımak istemiyorum. Bellek ayak izi küçücük olabilir, ancak bir nesne yaratmanın maliyeti de öyle. Ama herkes istediklerini yapabilir. – MartinS

+0

'int c = ObjectUtils.compare (o1.get (i), o2.get (i))' yi kullanırdım. Aksi takdirde 'o1.get (i) == null' ise bir NPE alırsınız. ('ObjectUtils', apache commons kütüphanesinden alınmıştır) –