Jak posortować listę obiektów według jakiejś właściwości
Mam prostą klasę
public class ActiveAlarm {
public long timeStarted;
public long timeEnded;
private String name = "";
private String description = "";
private String event;
private boolean live = false;
}
i
List & < ActiveAlarm & >end. Jak posortować w kolejności rosnącej
timeStarted, a następnie
timeEnded? Czy ktoś może pomóc? Wiem w C ++ z ogólnym algorytmem i operatorem przeciążenia & < ,, ale jestem nowy w Javie.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
12 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
lub
Ogólnie rzecz biorąc, warto wdrożyć http://download.oracle.com/jav ... .html
jeśli istnieje jeden porządek sortowania „naturalny” ... w przeciwnym razie (jeśli tak
chcesz sortować w określonej kolejności, ale równie łatwo możesz wybrać inną) lepiej zaimplementować http://download.oracle.com/jav ... ml... Szczerze mówiąc, ta konkretna sytuacja może pójść w dowolnym kierunku ... ale chciałbym,
prawdopodobnie
utknąłem na bardziej elastycznym .
EDYCJA: przykładowa realizacja:
Anonimowy użytkownik
Potwierdzenie od:
na przykład
:
Od wersji Java 8 można po prostu użyć wyrażenia lambda do reprezentowania instancji komparatora.
Anonimowy użytkownik
Potwierdzenie od:
Odpowiedź JAVA 8 i nowsza (używając wyrażeń
Lambda)
Java 8 wprowadziła wyrażenia Lambda, aby było to jeszcze łatwiejsze! Zamiast tworzyć obiekt Comparator () z całym jego szkieletem, możesz to uprościć w następujący sposób: (używając swojego obiektu jako przykładu)
lub jeszcze krócej:
To jedno stwierdzenie jest równoważne z następującym:
Wyrażenia lambda należy traktować jako coś, co wystarczy umieścić w odpowiednich częściach kodu: sygnaturze metody i tym, co jest zwracane.
Druga część Twojego pytania dotyczyła sposobu porównywania z wieloma polami. Aby to zrobić za pomocą wyrażeń Lambda, możesz użyć funkcji , aby skutecznie połączyć dwa porównania w jedno:
Powyższy kod posortuje listę najpierw według , a następnie według (dla tych wpisów, które mają ten sam ).
Ostatnia uwaga: łatwo jest porównać prymitywy „długie” lub „int”, można po prostu odjąć jeden od drugiego. Jeśli porównujesz obiekty („Long” lub „String”), sugeruję użycie ich porównania w wierszu. Przykład:
EDYCJA: Podziękowania dla Lucasa Edera za wskazanie mi funkcji .
Anonimowy użytkownik
Potwierdzenie od:
Listę możemy posortować na dwa sposoby
:
1. Korzystanie z komparatora
: w razie potrzeby użyj logiki sortowania w wielu miejscach
Jeśli chcesz użyć logiki sortowania w jednym miejscu, możesz napisać anonimową klasę wewnętrzną, taką jak ta, lub możesz wyodrębnić komparator i użyć go w kilku miejscach.
Możemy poprosić null o sprawdzenie właściwości, jeśli moglibyśmy użyć „Long” zamiast „long”.
2. Używanie porównywalnych (porządek naturalny)
: jeśli algorytm sortowania będzie zawsze trzymał się jednej właściwości:
napisz klasę, która implementuje metodę „Comparable” i zastępuje metodę „compareTo”, jak zdefiniowano poniżej
}
wywołanie metody sortowania w celu sortowania na podstawie naturalnego porządku
Anonimowy użytkownik
Potwierdzenie od:
collectionObjec.sort (Comparator_lamda) lub Comparator.comparison (CollectionType :: getterOfProperty)
kod :
lub
Anonimowy użytkownik
Potwierdzenie od:
To powinno dać ci ogólne pojęcie. Gdy to zrobisz, możesz wywołać nad listą.
Anonimowy użytkownik
Potwierdzenie od:
i https://docs.oracle.com/javase ... .html
na przykład
:
Anonimowy użytkownik
Potwierdzenie od:
https://google.github.io/guava ... .html
guawa przez:
Anonimowy użytkownik
Potwierdzenie od:
i przenieś własne http://download.oracle.com/jav ... .html
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Jeśli zrobisz jedno i drugie, zostanie zignorowane i użyty zostanie . Pomaga, aby obiekty wartości miały własne wartości logiczne , co jest najbardziej rozsądnym sortowaniem dla twojego obiektu wartości, podczas gdy każdy indywidualny przypadek użycia ma swoją własną implementację.