W Javie, mam Set
i chcę go przekształcić w posortowane List
. Czy jest jakiś sposób w pakiecie java.util.Collections
, który zrobi to za mnie?Jak sortować zestaw do listy w Javie?
Odpowiedz
Odpowiedź provided by the OP nie jest najlepsza. Jest nieefektywny, ponieważ tworzy nową niepotrzebną macierz. Podnosi również "niezatwierdzone" ostrzeżenia z powodu problemów związanych z bezpieczeństwem typu wokół ogólnych tablic.
Zamiast używać coś takiego:
public static
<T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
List<T> list = new ArrayList<T>(c);
java.util.Collections.sort(list);
return list;
}
Oto przykład wykorzystania:
Map<Integer, String> map = new HashMap<Integer, String>();
/* Add entries to the map. */
...
/* Now get a sorted list of the *values* in the map. */
Collection<String> unsorted = map.values();
List<String> sorted = Util.asSortedList(unsorted);
Nie ma jednej metody, aby to zrobić. Użyj tego:
@SuppressWarnings("unchecked")
public static <T extends Comparable> List<T> asSortedList(Collection<T> collection) {
T[] array = collection.toArray(
(T[])new Comparable[collection.size()]);
Arrays.sort(array);
return Arrays.asList(array);
}
Istnieje również funkcja Collections.sort, ale myślę, że robi to samo.+1 i tak. – CookieOfFortune
Collections.sort przyjmuje listę jako parametr. –
Sort zestaw:
return new TreeSet(setIWantSorted);
czyli
return new ArrayList(new TreeSet(setIWantSorted));
To była moja pierwsza myśl, ale osoba pytająca chciała listę: –
@Alex: To podejście może być nadal stosowane; return new ArrayList (new TreeSet (setIWantSorted)) – Jonik
Użyłem tego rozwiązania, ale nie radziłbym tego. Ponieważ dokumentacja dotycząca stanów TreeSet (patrz http://download.oracle.com/javase/1.4.2/docs/api/java/util/TreeSet.html), efektywnie używa metody compareTo() zamiast równych () - więc jeśli masz dwa obiekty w zbiorze, które mają ten sam wynik równości(), będą one postrzegane jako duplikaty i jako takie nie zostaną dodane do zestawu TreeSet. Strzec się. – fwielstra
List myList = new ArrayList(collection);
Collections.sort(myList);
... powinno wystarczyć jednak. W razie potrzeby dodaj smaku z generics.
Miałem użyteczny fragment, który chciałem przekazać społeczności. Kiedy szukałem informacji, nie mogłem tego znaleźć. Próbowałem ułatwić pracę następnej osobie. http://stackoverflow.com/questions/18557/how-does-stackoverflow-work-the-unofficial-faq#119658 –
Tak, oczywiście, ale ten link, który podałeś, w rzeczywistości mówi o _rzeczywistych pytaniach (np. które nie mają odpowiedzi, a potem ją znajdź). Twoje pytanie tutaj miało tylko dać odpowiedź ... Mógłbym wprowadzić setki pytań i odpowiedzieć sobie; nie o to chodzi! – Seb
@Seb: Nie zgadzam się. Nie widzę niczego złego w tym pytaniu. Oczywiście nie było to bardzo proste pytanie, a teraz zna on lepszy sposób niż wcześniej! –
można przekonwertować do zestawu z ArrayList
, gdzie można sortować ArrayList
użyciu Collections.sort(List)
.
Oto kod:
keySet = (Set) map.keySet();
ArrayList list = new ArrayList(keySet);
Collections.sort(list);
Czym różni się to od zaakceptowanej odpowiedzi? – Tim
Zawsze bezpiecznie użyć komparatora lub porównywalne interfejs w celu zapewnienia realizacji sortowania (jeśli obiekt nie jest String lub klasy otoki dla prymitywnych typów danych). Jako przykład implementacja komparator do sortowania pracowników na podstawie nazwy
List<Employees> empList = new LinkedList<Employees>(EmpSet);
class EmployeeComparator implements Comparator<Employee> {
public int compare(Employee e1, Employee e2) {
return e1.getName().compareTo(e2.getName());
}
}
Collections.sort(empList , new EmployeeComparator());
Komparator jest przydatna, gdy trzeba mieć inny algorytm sortowania na tym samym obiekcie (Say nazwa EMP, EMP wynagrodzenie, itp). Sortowanie w jednym trybie można zaimplementować za pomocą porównywalnego interfejsu do wymaganego obiektu.
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);
list.addAll(sortedset);
gdzie originalset = zestaw sortowania i list = lista zostać zwrócone
Oto jak można to zrobić z Java 8 za Streams:
mySet.stream().sorted().collect(Collectors.toList());
lub z niestandardowym komparatora:
mySet.stream().sorted(myComparator).collect(Collectors.toList());
@Jeremy Stein Chciałem zaimplementować ten sam kod. Poza tym chciałem posortować zestaw do listy, więc zamiast używać Seta przekonwertowałem zestaw wartości na Listę i posortuję tę listę, ponieważ jest to jedna z nich. Ten kod pomógł mi,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());
- 1. Jak zwrócić zestaw w Javie
- 2. Zestaw wyników do listy
- 3. python: jak sortować listy alfabetycznie w odniesieniu do wielkich liter
- 4. Jak sortować zestaw kwerend Django przed datą dzisiejszą?
- 5. "Tworzenie" listy w Javie?
- 6. Jak sortować listy Pythona ciągów liczb
- 7. Jak sortować listę według innej listy?
- 8. Jak sortować chińskie struny po skoku w Javie?
- 9. Drzewo Java-Konwertuj zestaw do listy
- 10. Jak wdrożyć listy krotnie w Javie
- 11. Jak usunąć konkretny obiekt listy w Javie?
- 12. Wygeneruj zestaw unikatowych liczb losowych w Javie
- 13. Wyświetlanie listy w Javie jak elegancki jak w Pythonie
- 14. Jak sortować ciągi całkowe?
- 15. Jak jednocześnie sortować 2 listy za pomocą LINQ?
- 16. Jak sortować Python Przedmioty
- 17. Uporządkowanie listy uporządkowanych map w Javie
- 18. Funkcje listy jako wybory w Javie
- 19. Jak sortować właściwości w java?
- 20. Jak sortować w widoku sql
- 21. Jak sortować ArrayCollection w Flex
- 22. Jak sortować kolekcję w Magento?
- 23. Jak sortować listę w Jinja2?
- 24. Jak sortować tablicę w JavaScript
- 25. Jak sortować wektor w Rust?
- 26. Jak sortować plik w miejscu?
- 27. Jak sortować daty w słowniku?
- 28. Jak sortować alfabetycznie JQuery UI do sortowania?
- 29. Jak sortować połączoną listę w sql?
- 30. Jak sortować pliki numerycznie?
Dzięki! To pomijanie Ostrożności zawsze mi przeszkadzało. –
@erickson, gdzie muszę znaleźć klasę Util, mam na myśli, z której paczki. Proszę mi pomóc. – sunleo
@sunleo Klasa 'Util' jest tą, która zawiera metodę' asSortedList() ', którą napisałem. Innymi słowy, sam napiszesz klasę 'Util' i umieścisz w niej ten kod. – erickson