Streamの再利用をテストしてみた
ArrayListからStreamを取得して、filterした結果のStreamを2回使ってみた
なんとなくのコードイメージはこんな感じ(あくまでイメージです)
ArrayList<String> datas = getStringList(); Stream<String> stream = datas.stream().filter((s) -> s.length() > 3); stream.foreach(System.out::println); System.out.println(stream.count());
Streamは再利用できないという結論に達した。
どうしても再利用したいときはfilter結果の別のListを作るか、もう一回呼び出すしか無い模様
内部処理を詳しくは調べてないけど、Collection系はstream()の戻りとして内部的にiteratorを作ってると思えば凄く納得のいく結果だった
雑感
この再利用テストの前に書いてたコードでStreamインタフェースは面白いけど、色々気をつけないとふと気がついたら無駄な計算が増えそうで嫌だなぁ〜と思った。でも、使うけどね!
今やStreamの無いJava8なんて、油の入ってないうまかっちゃんと同じだと思ってる・・・これが判るのは九州の人だけ?