”Java8のStreamを使いこなす”に関する議論

下記の記事に関して、著者の @kis さんのご発言等。 Java8のStreamを使いこなす (http://d.hatena.ne.jp/nowokay/20130504#1367702641) Java8のStreamの目的と書きやすさや可読性、並行処理の効果について (http://d.hatena.ne.jp/nowokay/20130506#1367793849)
5
きしだൠ(K1S) @kis

java8のstreamのreduceの使い方がイマイチようわからん。1引数のと2引数のはわかるんだけど。3引数のやつのcombinerには何指定するんだろ

2013-05-04 21:49:35
きしだൠ(K1S) @kis

平行じゃないほうのstreamだと、reduce(init, accum, comb);でaccumしか呼び出されないけど、parallelStreamだとaccumはmapのような扱いでcombでreduceされる感じ。

2013-05-04 21:58:38
きしだൠ(K1S) @kis

って、えーこのreduceの動きいいの?streamかparallelStreamかで与えるべきパラメータが違うのって、すげー使いにくいんじゃ

2013-05-04 22:01:07
きしだൠ(K1S) @kis

やっと3引数reduceの使い方わかった。最初の引数は、単位元である必要があるのだな。で、2番目の引数にあたえるaccumは与えられた引数に対して副作用があってはいけない。

2013-05-04 22:47:15
きしだൠ(K1S) @kis

あれ、collectあればreduceいらないんじゃ・・・

2013-05-05 00:50:20
きしだൠ(K1S) @kis

Java8のstreamで、collect+Collectorsでできないreduceならではのサンプルが思いつかない・・・

2013-05-05 00:51:30
きしだൠ(K1S) @kis

「無限ストリーム」でぐぐると、無限チューンのホンダ ストリームばっかり出てくるから、無限リストという言葉を使わざるをえない。あとはホンダからリストという車が出ないことを祈るばかりである

2013-05-05 05:21:40
きしだൠ(K1S) @kis

Java8のStreamについてまとめた 「Java8のStreamを使いこなす - きしだのはてな」 http://t.co/8s176AnrGm

2013-05-05 06:40:14
きしだൠ(K1S) @kis

java.util.MapにOptional返してくれるgetを用意してくれればいいのに

2013-05-05 09:29:52
きしだൠ(K1S) @kis

「Javaを使い続ける領域において」っていうコメントがついてるけど、たくさんのサーバーがJavaで書かれている状況で、parallelStream使えば手軽にコレクションの並行処理が書けるってのは、非常に有用なことだと思う。

2013-05-05 17:54:45
きしだൠ(K1S) @kis

Java8 lambda記法は飾りで、本命は型推論と並行処理なんだよね

2013-05-05 18:12:54
きしだൠ(K1S) @kis

streamつかったときの可読性の低さって、「手続きを見ようとした場合の可読性の低さ」であって、やりたいことの可読性としてはstreamのほうが高い。

2013-05-05 21:29:37
きしだൠ(K1S) @kis

細かい例外制御したり、手続きが正しいか検証したりするには、手続き型で書いたほうがやりやすいというか、実際の手続きが隠蔽されるstreamの書き方では難しい。その必要性がどれだけあるかって話でもあるけど。

2013-05-05 21:30:01
きしだൠ(K1S) @kis

まあ、streamで書いたときに単純に「可読性が低い」って言ってるのは、「いままでの手続き型の可読性とは違う」と言ってるだけで、「おれにとっての可読性が低い」という以上の意味はないと思う。

2013-05-05 21:31:49
きしだൠ(K1S) @kis

streamをparallelStreamにするだけで、4コア8スレッドのマシンで処理時間1/4弱になった!えらい!

2013-05-05 22:49:56
きしだൠ(K1S) @kis

「恥ずかしくなって猫の写真に置き換えました。」ほんとにネコになってるww 「Java8のStreamを使いこなすをC#で - 猫とC#について書くmatarilloの雑記」 http://t.co/xG9Zy9gFfE

2013-05-05 22:54:38
きしだൠ(K1S) @kis

Java8のエントリを書いて思うのは、Javaプログラマに関数型の考え方を持ち込むためにはlambda構文が必要だった、ということだな。これまでJavaプログラマで関数型言語の考え方を得た人の多くは、Javaプログラマではなくなってしまってるしw

2013-05-05 22:59:41
きしだൠ(K1S) @kis

うーむ、Listを結合するメソッドがないのだなぁ。ほしいな。

2013-05-06 02:00:26
きしだൠ(K1S) @kis

あと、並行ストリームのベンチも。それはそうと、コーディング規約でLambda禁止になる気配を感じるコードになったw 「Java8のStreamの目的と書きやすさ、可読性について - きしだのはてな」 http://t.co/VFoCPgRWiB

2013-05-06 08:06:37
きしだൠ(K1S) @kis

@makotan ではそれで書き直そう・・・と思ったけど、結構頭のほうにTimeUnit.MICROSECONDS.toSecondsつけないといけなくて、lambda記述が見にくくなるからやめたw

2013-05-06 08:49:21
きしだൠ(K1S) @kis

OptionalもStream扱いだったらうれしいのに

2013-05-06 08:51:35
きしだൠ(K1S) @kis

具体的には、Optionalにmapとstreamがほしいなー

2013-05-06 08:56:19
きしだൠ(K1S) @kis

@makotan Optionalがmapできれば、map(TimeUnit.NANOSECONDS::toSeconds)って書けてかっこいいんだけど。

2013-05-06 09:00:29
きしだൠ(K1S) @kis

@makotan それは、「綺麗」じゃないよ!

2013-05-06 09:09:26
きしだൠ(K1S) @kis

@makotan zipでprintlnするってことだよね?そうすると、なんらかどうでもいい値を返す必要がでてくるし、出力処理はzipとは分けたいし。

2013-05-06 09:11:21