Znalezienie najnowszej książki - LocalDateTIme

0

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ć?

0

albo zapytaniem SQL na poziomi bazy (posortować po dacie) albo pobrać wszystkie do listy i w javie posortować.

0

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?

1

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));

0

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ą.

0

Źle napisałem w pytaniu. Chodzi mi o kilka najnowszych pozycji.
Próbowałem za pomocą findAllByOrderByDateOfCreation ale niestety nie działa.

1

Czyli nie jedną a kilka? Np. najnowsze trzy?
No to jednak sortowanie.

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1