Cześć. Każdy obiekt typu Book ma w sobie LocalDateTime
. Chciałbym znaleźć spośród wszystkich ksiażek, które znajdują się w bazie, tę która jest najnowsza. Jak mogę to zrobić?
albo zapytaniem SQL na poziomi bazy (posortować po dacie) albo pobrać wszystkie do listy i w javie posortować.
Tylko w jaki sposób właśnie posortować? Interesują mnie w sumie te dwie opcje. Także dla obu chętnie poznam odpowiedź.
Jedyną opcję jaką znalazłem dla sortowania z listy to Collections.sort
, czy jest ona dobra? A jak za pomocą zapytań SQL?
Vavr:
Option<Book> newest = List.of(book1, book2).maxBy(Comparator.comparing(Book::getDate));
SQL: https://stackoverflow.com/questions/11128194/oracle-select-most-recent-date-record
Java:
Optional<Book> newest = Lists.newArrayList(book1, book2).stream().max(Comparator.comparing(Book::getDate));
Jeżeli tylko jeden, najmniejszy wynik to nie trzeba całości sortować a po prostu go znaleźć: Collections.max
.
W SQL:
SELECT * FROM Books WHERE BookDate = (SELECT max(BooksDate) FROM Books);
Ewentualnie LIMIT 1
gdyby było kilka książek z najnowszą datą.
Źle napisałem w pytaniu. Chodzi mi o kilka najnowszych pozycji.
Próbowałem za pomocą findAllByOrderByDateOfCreation
ale niestety nie działa.
Czyli nie jedną a kilka? Np. najnowsze trzy?
No to jednak sortowanie.
Można tak:
public class Book {
public final LocalDateTime localDateTime;
public Book(LocalDateTime localDateTime) {
this.localDateTime = localDateTime;
}
public static List<Book> fromNewest(List<Book> books){
return books.stream().sorted((book1, book2) -> book2.localDateTime.compareTo(book1.localDateTime)).collect(Collectors.toList());
}
}
W