Mam List<String>
obiekt, który zawiera nazwy krajów. Jak mogę posortować tę listę alfabetycznie?
java
list
sorting
collections
alphabetical
Lennie
źródło
źródło
Odpowiedzi:
Zakładając, że są to ciągi, użyj wygodnej metody statycznej
sort
…źródło
Rozwiązanie z kolekcji.sort
Jeśli jesteś zmuszony do korzystania z tej listy lub jeśli twój program ma podobną strukturę
wtedy odpowiedź Thilos będzie najlepszym sposobem na zrobienie tego. Jeśli połączysz to z radą Toma Hawtina - tackline , otrzymasz:
Rozwiązanie z zestawem TreeSet
Jeśli możesz swobodnie decydować i twoja aplikacja może stać się bardziej złożona, możesz zmienić kod, aby zamiast tego użyć TreeSet. Ten rodzaj kolekcji sortuje wpisy tylko po ich wstawieniu. Nie trzeba wywoływać sort ().
Uwaga dodatkowa na temat tego, dlaczego wolę TreeSet
Ma to pewne subtelne, ale ważne zalety:
TreeSet<String> countyNames
i natychmiast wie: jest to posortowana kolekcja ciągów bez duplikatów, i mogę być pewien, że jest to prawdą w każdej chwili . Tyle informacji w krótkiej deklaracji.Używanie odpowiedniej kolekcji do właściwego zadania jest kluczem do pisania krótkiego i wolnego od błędów kodu. W tym przypadku nie jest tak demonstracyjny, ponieważ zapisujesz tylko jedną linię. Przestałem jednak liczyć, jak często widzę, jak ktoś korzysta z Listy, gdy chce się upewnić, że nie ma w nim nikogo, a potem sam tę funkcję buduje. Albo jeszcze gorzej, używając dwóch list, gdy naprawdę potrzebujesz mapy.
Nie zrozumcie mnie źle: używanie kolekcji.sort nie jest błędem ani wadą. Ale w wielu przypadkach TreeSet jest znacznie czystszy.
źródło
Możesz utworzyć nową posortowaną kopię za pomocą Java 8 Stream lub Guava:
Inną opcją jest sortowanie w miejscu za pośrednictwem interfejsu API kolekcji:
źródło
Lepiej późno niż wcale! Oto jak możemy to zrobić (tylko w celu uczenia się) -
źródło
W jednym wierszu za pomocą Java 8:
źródło
Użyj dwóch argumentów dla
Collections.sort
. Będziesz potrzebował odpowiedniegoComparator
który traktuje przypadek odpowiedni (tj. Robi leksykalne, a nie porządkowanie UTF16), taki jak ten, który można uzyskaćjava.text.Collator.getInstance
.źródło
O ile nie sortujesz ciągów tylko w języku angielskim bez akcentu, prawdopodobnie chcesz użyć
Collator
. Poprawnie sortuje znaki diakrytyczne, może ignorować wielkość liter i inne elementy specyficzne dla języka:Możesz ustawić siłę zbieracza , patrz javadoc.
Oto przykład słowackiego, gdzie
Š
należy iśćS
, ale w UTFŠ
jest gdzieś poZ
:źródło
Oto czego szukasz
źródło
Za pomocą
Collections.sort()
możemy posortować listę.wynik:
źródło
alfabet malejący:
źródło
To samo w JAVA 8: -
źródło
źródło
Możesz spróbować użyć metody, którą stworzyłem.
String key
- będzie kolejność, którą chcesz, w tym przypadku alfabetycznie. Po prostu wstaw „abc ...”.String list[]
- lista, którą chcesz uporządkować za pomocą klucza.int index
- ustawiony na 0, ustawi przesunięcie dla klucza.źródło