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ć?
Znalezienie najnowszej książki - LocalDateTIme
- Rejestracja: dni
- Ostatnio: dni
- Postów: 75
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 797
albo zapytaniem SQL na poziomi bazy (posortować po dacie) albo pobrać wszystkie do listy i w javie posortować.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 75
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?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 29
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));
- Rejestracja: dni
- Ostatnio: dni
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ą.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 75
Źle napisałem w pytaniu. Chodzi mi o kilka najnowszych pozycji.
Próbowałem za pomocą findAllByOrderByDateOfCreation ale niestety nie działa.
- Rejestracja: dni
- Ostatnio: dni
Czyli nie jedną a kilka? Np. najnowsze trzy?
No to jednak sortowanie.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3303
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