Wpis z mikrobloga

#naukaprogramowania #java

Hej, mam klasę User, w niej String dataUrodzenia (oraz opcjonalnie string numerTelefonu) w postaci yyyy-mm-dd zczytywany z txt, chcę iterować listę w pętli

for (User dataUrodzenia : list) {
}

(chyba taka jest dobra) tak, żeby dostać najstarszego użytkownika który numer telefonu posiada, jak to wykombinować? Z góry dzięki, nie mam pojęcia która biblioteka będzie najlepsza i jak to ugryźć.
  • 19
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@dzeksondzekson: zamiast stringa trzymaj datę, np. LocalDate i parsuje do niej przy wczytywaniu
user.date = LocalDate.parse(DateTimeFormatter.ofPattern("yyyy-MM-dd"))

a potem User user = list.stream().filter(u -> u.numerTelefonu != null).max((u1, u2) -> u1.date.compareTo(u2.date));
  • Odpowiedz
@dzeksondzekson: list.stream().filter(maTelefon()).mapReduce(zostawTegoStarszego()).asList().get(0)
Oczywiście metody źle bo z głowy, implementację filtra i redukcji zostawiam, bo trywialne.
:)
  • Odpowiedz
@Kuriozal: Chyba im większy time w milisekundach tym starszy :P btw Działa. Śliczne dzięki. Jeszcze mam ostatnie pytanie, jak rozwiązać to, żeby program wypisywał mi najstarszego, ale z numerem telefonu, czyli jak to porównywać ten string z numerem telefonu i jak to w klasie walidować żeby mógł być null, czy lepiej null czy pusty string?

Jeszcze istotne w tym kontekście jest to, żeby wypisywać nei wiem czy zmieniać w metodzie
  • Odpowiedz
@Algeroth: Dzięki, miałem problem z nullem bo wywalało błąd przy zczytywaniu z pliku jeśli pole za przecinkiem było null, wtedy nie chciało zrobić obiektu, ale jak dałem w pliku tekstowym spację to wszystko działa.

Ostatnie 2 pytania.

1. Jak to łatwo zmienić żeby pokazywało wiek zamiast daty urodzenia przy wypisywaniu listy użytkowników, domyślam się że muszę zmienić w toString bo obecnie
  • Odpowiedz
@dzeksondzekson: zrób sobie funkcję, która przyjmuje jako parametr tą datę, i w tej funkcji sparsuj sobie tą date do samego roku i od bieżącego roku (new Date() ) odejmij tą co masz z parametru. I to możesz dla każdego obiektu pozamieniać w tej liście, przy założeniu że dodasz pole Integer iloscLat lub zamienisz tamten atrybut.

Co do testów to polecam poczytać o JUnit. Zaimportować bibliotekę, porobić kilka testów jednostkowych. Polega
  • Odpowiedz
@dzeksondzekson

Date date = new Date(); Calendar calendar = new GregorianCalendar(); calendar.setTime(date); int year = calendar.get(Calendar.YEAR); //Add one to month {0 - 11} int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAYOFMONTH)
  • Odpowiedz