Mam obiekt Phone
public class Phone {
private String model;
private BigDecimal price;
private Color color;
}
Stworzyłem tymczasową listę obiektów Phone, aby stworzyć metodę, w której będzie możliwe posortowanie tej listy po dowolnym parametrze podanym w argumentach funkcji.
Metoda:
static List<Phone> sortByParameter(List<Phone> phones, String parameter) {
parameter = parameter.toLowerCase();
return phones
.stream()
.sorted(Comparator.comparing(
parameter.equals("model") ? Phone::getModel :
parameter.equals("color") ? Phone::getColor : Phone::getPrice,
Comparator.reverseOrder()
))
.collect(Collectors.toList());
}
Czyli założenie metody to podanie listy obiektów Phone jako pierwszy argument, a jako drugi argument dowolny parametr, który obiekt Phone posiada np.
sortByParameter(phones, "color");
Jednak metoda, którą napisałem wyrzuca mi błąd przy referencji.
Myślałem o zastosowaniu interfejsów funkcyjnych, aby przekazywać dowolny parametr, ale chyba to nie wyjdzie. Macie jakieś pomysły, jak to ogarnąć?
Nie chcę tworzyć osobnej funkcji do sortowania dla każdego parametru, tylko jedną uniwersalną funkcję.