• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java - lambda i strumienie vs pętle - co jest dobrą praktyką?

VPS Starter Arubacloud
+3 głosów
1,477 wizyt
pytanie zadane 2 marca 2018 w Java przez niezalogowany

Hej. Dowiedziałem się, czym są strumienie i lambda, a teraz chciałbym zastosować tę wiedzę w praktyce. Moje pytanie brzmi: czy warto w prostych metodach stosować strumienie i co jest tzw. dobrą praktyką? Na przykład moja stara metoda wyglądała tak:

 

@Override
    public Dog oneDog(String name) {

       Dog oneDog = null;
        for (Dog dog : allDogs()) {
            if (dog.getName().equalsIgnoreCase(name)) {
                oneDog = dog;
            }
        }
        return oneDog;
    }

nowa wygląda tak:

 

@Override
    public Dog oneDog(String name) {

        return allDogs().stream().filter(dog -> dog.getName().equalsIgnoreCase(name)).findAny().get();
       
    }

Mniej kodu, który jest chyba nawet czytelniejszy. Znalazłem w internecie porównanie: 

https://blog.jooq.org/2015/12/08/3-reasons-why-you-shouldnt-replace-your-for-loops-by-stream-foreach/

Wygląda na to, że Stream.forEach jest wolniejsze od zwykłej pętli for. Czy coś w tym temacie się zmieniło?

Ogólnie lambda jest super! :D

2
komentarz 2 marca 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Ja tak dodam słowo na temat wydajności. Pisząc program w większości przypadków powinno się używać podejścia które jest bardziej czytelne a nie wydajniejsze. Zyski na wykonaniu forEach na stream w porównaniu do zwykłego są tak niezauważalne w większości klasach problemów jest to pomijalne. Dodając do tego fakt, że większość aplikacji łączy się z bazą danych, pojedynczy zysk na zamianie "for-ów" zniknie pod czasem ściągania danych z bazy.
1
komentarz 3 marca 2018 przez niezalogowany
Dzięki. W tym wykładzie:
https://www.youtube.com/watch?v=1OpAgZvYXLQ&t=3576s
autor przedstawił wyniki ankiety, z której wynika, że rozszyfrowanie pętli for zajęło ludziom około 30 sekund dłużej niż rozszyfrowanie strumieni. A jako że często czytanie kodu zajmuje 90% czasu pracy programisty (według autorów książki "Czysty kod"), to nawet tracąc na wydajności, wciąż nasz kod zyskuje, kiedy zastępujemy pętle for strumieniami :D

1 odpowiedź

+2 głosów
odpowiedź 2 marca 2018 przez miro Pasjonat (23,870 p.)
To prawda, że powinniśmy unikać forEach na streamach. Jednak zauważ, że w swoim przykładzie nie użyłeś foreach. Ważnym kwestią przy pisaniu kodu jest jego czytelność i utrzymywać, co daje przewagę używania lambd.
W którymś wykładzie Venkat Subramaniam poruszał kwestię, gdzie warto a gdzie nie używać streamów. Niestety nie pamiętam w którym więc przesyłam pierwszy link do niego https://www.youtube.com/watch?v=1OpAgZvYXLQ
1
komentarz 2 marca 2018 przez mbabane Szeryf (79,260 p.)
W streamach istotne jest też to, że mają wsparcie do działania równoległego (na wątkach), tzn. nie trzeba tworzyć dodatkowych elementów aby z tego skorzystać.

W jednej książce jest też takie stwierdzenie, że konstruowanie wyrażeń na streamch jest koncepcyjnie podobne do zapytań SQL.
komentarz 3 marca 2018 przez niezalogowany
Dzięki, zapamiętam uwagę odnośnie do wielowątkowości, choć na razie z tego nie korzystałem.
komentarz 3 marca 2018 przez niezalogowany

@miro, póki co wiem, że warto je stosować wszędzie tam, gdzie mamy interfejsy funkcyjne i w swoim pisaniu staram się wykorzystać jak najwięcej wspomnianych interfejsów z pakietu java.util.function.

1
komentarz 3 marca 2018 przez niezalogowany

@miro, miałem czas i obejrzałem polecony przez Ciebie wykład i wow, dzięki wielkie, prawie 3h solidnej dawki wiedzy. Facet jest bardzo dobry! :)

komentarz 3 marca 2018 przez miro Pasjonat (23,870 p.)
Facet ma naprawdę dar do przekazywania wiedzy którą posiada, a poza tym jest w pewien sposób zabawny. Jest jeszcze kilka jego wykładów na YT min. JS, Kotlin i coś o dobrych praktykach.
komentarz 3 marca 2018 przez mbabane Szeryf (79,260 p.)
Pierwsze skojarzenie kiedy zobaczłem twarz tego pana:
https://www.youtube.com/watch?v=1aEqd4bl6Bs

Podobne pytania

0 głosów
1 odpowiedź 393 wizyt
pytanie zadane 17 października 2020 w Java przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 176 wizyt
pytanie zadane 5 listopada 2019 w Java przez aspoka Mądrala (5,290 p.)
0 głosów
1 odpowiedź 465 wizyt
pytanie zadane 29 listopada 2017 w Java przez newUser Użytkownik (520 p.)

93,020 zapytań

141,985 odpowiedzi

321,284 komentarzy

62,366 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...