LoginSignup
4
4

More than 3 years have passed since last update.

【Java】Collectors.collectingAndThenを使う

Last updated at Posted at 2019-06-27

Collectors.collectingAndThenとは

Collect後の値を処理した値を返すCollectorです。

使い方

以下のような状況があったとします。

リストに一時的に格納→処理を呼び出す
List<Integer> mappedList = /* Stream */
    ./* mapなど、stream処理 */
    .collect(Collectors.toList());

return hogeFunc(mappedList);

このような処理は、Collectors.collectingAndThenを使うことで以下のように書けます。

Collectors.collectingAndThenを使った形
return /* Stream */
  ./* mapなど、stream処理 */
  .collect(
      Collectors.collectingAndThen(
          Collectors.toList(),
          mappedList -> hogeFunc(mappedList) // mappedListを使った処理
      )
  );

何が嬉しいのか?

一時変数が減る

Collect結果を一時変数に一々格納する必要が無いので、一時変数が減らせます。
一時変数を置くことは可読性やコード品質の低下に繋がるので、それが減るのは嬉しいです。

直渡しより可読性が上がる

一番初めに挙げたコード例は、以下のように書くこともできます。

直で関数に引数を渡す形式で書いた場合
return hogeFunc(
    /* Stream */
        ./* mapなど、stream処理 */
        .collect(Collectors.toList())
);

しかし、これでは特に関数がネストしていく場合の可読性が低い1です。
また、これだとデバッガで引っ掛けて中身を読めないという欠点が有ります。

まとめ

Collectors.collectingAndThen、使っていきましょう。


  1. この場面に関しては、パイプライン演算子が有ればCollectors.collectingAndThenを使う必要も無いんですが……。 

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4