W języku Java, aby posortować tablicę niestandardowych obiektów według jednej z ich właściwości, możesz użyć jednej z następujących metod:
Implementacja interfejsu `Comparable`
- Zdefiniuj klasę niestandardową, która implementuje interfejs `Comparable`.
- Nadpisz metodę `compareTo(T o)` w taki sposób, aby porównywała obiekty na podstawie wybranej właściwości.
- Użyj `Arrays.sort()` do posortowania tablicy.
public class MyObject implements Comparable<MyObject> {
private int property;
public MyObject(int property) {
this.property = property;
}
public int getProperty() {
return property;
}
@Override
public int compareTo(MyObject other) {
return Integer.compare(this.property, other.property);
}
}
// Użycie:
MyObject[] myArray = {new MyObject(10), new MyObject(2), new MyObject(5)};
Arrays.sort(myArray);
Użycie `Comparator`
- Stwórz `Comparator` jako klasę anonimową, wyrażenie lambda lub klasę wewnętrzną.
- Zdefiniuj w nim metodę `compare()`, która porównuje obiekty według wybranej właściwości.
- Użyj `Arrays.sort()` z obiektem `Comparator` do posortowania tablicy.
public class MyObject {
private int property;
// Konstruktor, gettery, settery...
}
// Użycie:
MyObject[] myArray = {new MyObject(10), new MyObject(2), new MyObject(5)};
Arrays.sort(myArray, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return Integer.compare(o1.getProperty(), o2.getProperty());
}
});
// Lub używając wyrażenia lambda:
Arrays.sort(myArray, (o1, o2) -> Integer.compare(o1.getProperty(), o2.getProperty()));
Użycie metody referencyjnej
Jeśli klasa posiada metodę get dla porównywanej właściwości, możesz użyć metody referencyjnej w połączeniu z `Comparator.comparing()`.
public class MyObject {
private int property;
// Konstruktor, gettery, settery...
}
// Użycie:
MyObject[] myArray = {new MyObject(10), new MyObject(2), new MyObject(5)};
Arrays.sort(myArray, Comparator.comparing(MyObject::getProperty));
W przypadku sortowania w odwrotnej kolejności, możesz użyć `Comparator.reversed()`:
Arrays.sort(myArray, Comparator.comparing(MyObject::getProperty).reversed());
Wybór między `Comparable` a `Comparator` zależy od twojego konkretnego przypadku użycia. Jeśli sortowanie w naturalnej kolejności jest standardem dla twojej klasy, `Comparable` może być lepszym wyborem. Jeśli potrzebujesz wielu różnych sposobów sortowania lub sortowania w klasach, których nie możesz modyfikować, `Comparator` będzie lepszy.
Komentarz