Tags: Java

Java: jak posortować tablicę obiektów niestandardowych według właściwości?

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.