Štvou mě Streamy v Java 8

anonym

Štvou mě Streamy v Java 8
« kdy: 27. 04. 2018, 22:31:31 »
Přijde mi, že je těžké něco pěkně naprogramovat samo o sobě, v OOP. Musí si to člověk řádně promyslet. V Javě 8 přibyly Streamy a podle mě situaci zkomplikovaly. Dneska se mě kolega nadšeně zeptal, co na ně říkám. Trochu mi vzal vítr z plachet, protože na ně neříkám nic. Zaprvé nevím, kde bych je použil a řekl "tak tohle je jednoznačně přehlednější, než smyčky". Zadruhé kdekoliv v kódu jsem viděl, jak někdo používá Streamy, vždycky to byla sračka typu "musím to udělat přes stream, protože je to Java 8 a ta má streamy". Zatřetí málokdy se setkám se situací, kdy nepotřebuju zachytávat vyjímky, abych mohl specificky reagovat na chybu, a proto mi i chainování funkcí za sebe do streamu přijde naprosto useless. I kdybych nepotřeboval try catch zrovna teď, stejně nepoužiju spičeny Stream, protože se já nebo někdo další ke kódu vrátí a bude chtít odchytávat vyjímky. Doposud jsem viděl jeden jediný smysluplný usecase pro Streamy a ten je stejný jako ho má LINQ, tzn. manipulace s daty.


pecrom

Re:Štvou mě Streamy v Java 8
« Odpověď #1 kdy: 27. 04. 2018, 22:47:14 »
co treba takovy stream.filter.collect(toList) elegantne vybrat jenom prvky, ktere se nam hodi. a prikladu je hodne.

patrik

Re:Štvou mě Streamy v Java 8
« Odpověď #2 kdy: 27. 04. 2018, 22:59:50 »
Paralelní streamy jsou asi nejjednodušší způsob jak něco v Javě paralelizovat. Velkou úsporu kódu přináší i collectory jako group by atd.

andrej

Re:Štvou mě Streamy v Java 8
« Odpověď #3 kdy: 27. 04. 2018, 23:12:01 »
Přijde mi, že je těžké něco pěkně naprogramovat samo o sobě, v OOP. Musí si to člověk řádně promyslet. V Javě 8 přibyly Streamy a podle mě situaci zkomplikovaly.

problem je mozno v tom, ze streamy su v podstate funkcionalne programovanie, takze OOP unfriendly.

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:Štvou mě Streamy v Java 8
« Odpověď #4 kdy: 27. 04. 2018, 23:16:05 »
Doposud jsem viděl jeden jediný smysluplný usecase pro Streamy a ten je stejný jako ho má LINQ, tzn. manipulace s daty.

k čemu jinému bys to chtěl použít? Streamy jsou data.


Youda

Re:Štvou mě Streamy v Java 8
« Odpověď #5 kdy: 28. 04. 2018, 00:12:20 »
Paralelní streamy jsou asi nejjednodušší způsob jak něco v Javě paralelizovat. Velkou úsporu kódu přináší i collectory jako group by atd.

A taky pekne nahovno.
Mnohem bych radsi, kdyby do Jawy implementovali Gorutiny a channely.
Streamy v Jawe vypadaj jak rovnak na ohybak.

Robokot

Re:Štvou mě Streamy v Java 8
« Odpověď #6 kdy: 28. 04. 2018, 00:13:50 »
Streamy do Javy přidali, aby byla víc funkcionální, protože to je teď cool :) Koukám, že ne každý to ocení... Ale buď rád, že tam ještě nejsou monadické transformery, komonády a další perly funkcionalismu...

Youda

Re:Štvou mě Streamy v Java 8
« Odpověď #7 kdy: 28. 04. 2018, 00:58:09 »
Streamy do Javy přidali, aby byla víc funkcionální, protože to je teď cool :) Koukám, že ne každý to ocení... Ale buď rád, že tam ještě nejsou monadické transformery, komonády a další perly funkcionalismu...

Abys moh dostat doktorat z Computer Sciences, musis v ramci disertacky vymyslet neco noveho.
A kdyz uz z duvod vycerpani tematu uz nic rozumneho vymyslet jen tak nejde, musis zacit vymyslet picoviny.
Picoviny, ale nove, to je cesta k doktoratu.

Robokot

Re:Štvou mě Streamy v Java 8
« Odpověď #8 kdy: 28. 04. 2018, 02:35:12 »
Streamy do Javy přidali, aby byla víc funkcionální, protože to je teď cool :) Koukám, že ne každý to ocení... Ale buď rád, že tam ještě nejsou monadické transformery, komonády a další perly funkcionalismu...
Abys moh dostat doktorat z Computer Sciences, musis v ramci disertacky vymyslet neco noveho.
A kdyz uz z duvod vycerpani tematu uz nic rozumneho vymyslet jen tak nejde, musis zacit vymyslet picoviny.
Picoviny, ale nove, to je cesta k doktoratu.
Nejen v computer science, to platí i ve fyzice nebo chemii. O tzv. společenských "vědách" raději pomlčme, tam se dává PhD za totální bláboly, čím debilnější, tím lepší.

Sten

Re:Štvou mě Streamy v Java 8
« Odpověď #9 kdy: 28. 04. 2018, 06:49:31 »
Jak specificky reagujete na chybu při zpracovávání seznamu, že to nejde udělat přes streamy např. lambdou s try - catch?

Streamy jsou právě náhrada za LINQ v Javě. S tím, že jsou mnohem flexibilnější, třeba vůbec není problém mít nekonečný stream, protože mají líné vyhodnocování.

Sten

Re:Štvou mě Streamy v Java 8
« Odpověď #10 kdy: 28. 04. 2018, 07:28:51 »
Mnohem bych radsi, kdyby do Jawy implementovali Gorutiny a channely.

Takže Executor a Flow?

Ivan Nový

Re:Štvou mě Streamy v Java 8
« Odpověď #11 kdy: 28. 04. 2018, 07:31:33 »
Stream musíte použít tak, aby k žádné chybě nemohlo dojít už z principu, pokud potřebujete odchytávat chyby, máte to špatně navrženo, nebo špatně uvažujete, je třeba si uvědomit, že ve streamu máte pracovat jen s daty, která potřebujete a tím výběrem ty možné chyby odfiltrujete a žádný try-catch nepotřebujete, protože ho máte ho implementovaný pomocí filter.

Takže i tady platí, že si musíte věc dobře promyslet, aby to bylo elegantní, ale s trochu jinou filosofií.

V podstatě dříve jste uvažoval takto, dej další záznam, je to typ A, udělám to, je to typ B, udělám zase toto, ...
A nyní musíte uvažovat takto, ze souboru záznamů vyberu záznamy typu A a s nimi udělám toto, dále ze souboru záznamů vyberu záznamy typu B a udělám zase toto. Výsledky pak spojím do jiného seznamu.

A co za to dostanu? Možnost paralelizace, protože výběr ze souboru můžete dělat na jednom procesoru, použítí funkce paraleleně na mnoha procesorech, protože na pořadí zpracování nezáleží a dopředu víte co se všemi vybranými prvky máte udělat. Což pro první uvedený příklad neplatí.

Youda

Re:Štvou mě Streamy v Java 8
« Odpověď #12 kdy: 28. 04. 2018, 10:32:41 »
Mnohem bych radsi, kdyby do Jawy implementovali Gorutiny a channely.

Takže Executor a Flow?

Kdyz uz, tak Spring executor service.
http://www.baeldung.com/java-executor-service-tutorial

A podivej se do odkazu, kolik je s tim srani.
Srovnej se spustenim go func() a smytec.

A kazdy task je separatni java vlakno, gorutina je velice lightweight reseni

Kit

Re:Štvou mě Streamy v Java 8
« Odpověď #13 kdy: 28. 04. 2018, 11:10:25 »
Přijde mi, že je těžké něco pěkně naprogramovat samo o sobě, v OOP. Musí si to člověk řádně promyslet. V Javě 8 přibyly Streamy a podle mě situaci zkomplikovaly.

problem je mozno v tom, ze streamy su v podstate funkcionalne programovanie, takze OOP unfriendly.

To nám ovšem nebrání v tom, abychom jednu vrstvu aplikace měli strukturovaně, druhou objektově, třetí funkcionálně a doplnili to deklarativními šablonami.

Michal1

Re:Štvou mě Streamy v Java 8
« Odpověď #14 kdy: 28. 04. 2018, 12:15:03 »
Streamy do Javy přidali, aby byla víc funkcionální, protože to je teď cool :) Koukám, že ne každý to ocení... Ale buď rád, že tam ještě nejsou monadické transformery, komonády a další perly funkcionalismu...

Abys moh dostat doktorat z Computer Sciences, musis v ramci disertacky vymyslet neco noveho.
A kdyz uz z duvod vycerpani tematu uz nic rozumneho vymyslet jen tak nejde, musis zacit vymyslet picoviny.
Picoviny, ale nove, to je cesta k doktoratu.
Je otázkou, či je toto problém len v Computer Science. Koľko zbytočných pičovín (ale originálnych!) vznikne na jednu ozaj užitočnú, tiež originálnu myšlienku (ktorú nakoniec asi zadupu pod zem lebo málo citácii a pod.)