• 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,279 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,280 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,280 p.)
Pierwsze skojarzenie kiedy zobaczłem twarz tego pana:
https://www.youtube.com/watch?v=1aEqd4bl6Bs

Podobne pytania

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

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...