Java入門・初心者質問スレ Part.11

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウウー Sa07-jGB0)
垢版 |
2021/06/29(火) 11:42:34.74ID:iGYT4fi4a
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.10
https://mevius.5ch.net/test/read.cgi/tech/1585721355/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2022/03/05(土) 09:29:53.13ID:GtenIzBYM
>>577
minとmaxなんかは両方呼びたいという感覚はわかる
でもfindFirstとreduceは共存できない
findFirstを先に呼ぶと要素が見つかったらストリームが終了してしまうし、reduceを先に呼ぶと一つにまとめられてしまう
Streamの仕組みとユースケース的に妥当
共存させるための一般化した方法は二つ思いつく
一つは終端処理の直前で器に一旦溜め込むやり方
まさにcollectで終端させることと同じ
varとStream.toList()が使えれば多少は書きやすくなる
もう一つは複数の終端処理を引数にとり、すべての処理の気が済むまで委譲するという終端処理を用意すること
調べたらCollectors.teeing()というメソッドがJava12から導入されてた模様
2022/03/05(土) 09:38:57.36ID:suTSuZtU0
>>577
ストリームだからとしか。
Streamの元が、もしかしたらネットワークの向こう側から順次流れてくるデータかもしれないわけで、そうなると一度読み取って処理した値をもう一度使うにはメモリ上に溜めておくとかしないといけない。なので、一度Listにするとかが必要になる。
2022/03/05(土) 09:42:36.47ID:suTSuZtU0
>>577
ちな、minとmaxの両方を一度に欲しいとかなら、summarizingIntとか使えば可能。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Collectors.html#summarizingInt-java.util.function.ToIntFunction-

あるいはreduceとかで自分で集計すれば、一度でも色々できはする。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況