Znalezienie najnowszej książki - LocalDateTIme

Odpowiedz Nowy wątek
2018-12-26 19:11
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ć?

edytowany 3x, ostatnio: must, 2018-12-26 19:12
/// nie mogę edytować. Chodzi np o 3 najnowsze książki nie najnowsza ksiażke. - must 2018-12-26 21:00

Pozostało 580 znaków

2018-12-26 19:21
0

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


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

Pozostało 580 znaków

2018-12-26 19:36
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?

Pozostało 580 znaków

2018-12-26 20:30
1

Vavr:
Option<Book> newest = List.of(book1, book2).maxBy(Comparator.comparing(Book::getDate));

SQL: https://stackoverflow.com/que[...]elect-most-recent-date-record

Java:
Optional<Book> newest = Lists.newArrayList(book1, book2).stream().max(Comparator.comparing(Book::getDate));

tylko właśnie nie będę mieć book1 i book2 tylko listę wszystkich ksiażek, bo taki mam plan - pobrac wszystkie dane z bazy (wszystkie książki). Ewentualnie chce pobrać wszystkie ksiązki za pomocą findAllByOrderByDateOfCreation(); i wtedy wiadomo będzie która jest najstarsza, która najnowsza. Tylko nie wiem jeszcze czy to zadziała. Czy istnieje takie sorotwanie w SpringBoocie poprzez datę.. - must 2018-12-26 20:39

Pozostało 580 znaków

2018-12-26 20:43
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ą.

jeżeli tylko jeden to równie dobrze przy tworzeniu mozna zapisać gdzieś ID książki i nie trzeba nawet szukać :D Własnie dlatego chce to utrudnić i mieć 3 np. najnowsze. /// edit teraz widzę że dałem najnowszą a nie najnowsze książki w pytaniu. - must 2018-12-26 20:59
No to bez LIMIT - Delor 2018-12-26 21:01
Tylko jak bez limit. 3 różne daty - 3 rózne ksiazki. Za pomocą tego zapytania nie znajdzie mi jednej pozycji? - must 2018-12-26 21:03
Jeżeli będzie kilka książek z identyczną datą (co do sekundy) i jednocześnie będzie to najnowsza data to zwróci te książki. - Delor 2018-12-26 21:08
3 różne daty - 3 rózne ksiazki. - must 2018-12-26 21:09

Pozostało 580 znaków

2018-12-26 21:06
0

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

Pozostało 580 znaków

2018-12-26 21:13
1

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

Pozostało 580 znaków

2018-12-26 21:49
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

A ja się przypnę z odpowiedzią dla SQL: SELECT * FROM Books ORDER BY BookDate DESC LIMIT 3; - Delor 2018-12-26 21:59
Po co używać lambdy w ten sposób jak można skorzystać z Comparator.compareBy (czy jakoś tak) - scibi92 2018-12-26 23:18
Bo trzeba jeszcze wiedzieć jak używać tych reverseOrder, czy jakoś tak, a nie chciało mi się na szybko próbować. - piotrpo 2018-12-27 06:11

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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