1. 概要

このチュートリアルでは、 Stream.count()メソッドの使用方法について説明します。 具体的には、 count()メソッドとfilter()メソッドを組み合わせて、適用した述語の一致をカウントする方法を説明します。

2. Stream.count()を使用する

count()メソッド自体は、小さいながらも非常に便利な機能を提供します。 Stream.filter()など、他のツールとうまく組み合わせることができます。

Stream.filter()のチュートリアルで定義したものと同じCustomerクラスを使用してみましょう。

public class Customer {
    private String name;
    private int points;
    //Constructor and standard getters
}

さらに、同じ顧客のコレクションも作成します。

Customer john = new Customer("John P.", 15);
Customer sarah = new Customer("Sarah M.", 200);
Customer charles = new Customer("Charles B.", 150);
Customer mary = new Customer("Mary T.", 1);

List<Customer> customers = Arrays.asList(john, sarah, charles, mary);

次に、リストに Stream メソッドを適用してフィルターをかけ、フィルターが一致するものの数を決定します。

2.1. 要素を数える

count()の非常に基本的な使用法を見てみましょう。

long count = customers.stream().count();

assertThat(count).isEqualTo(4L);

count()long値を返すことに注意してください。

2.2. count() filter()の使用

前のサブセクションの例は、それほど印象的ではありませんでした。 List.size()メソッドでも同じ結果が得られた可能性があります。

Stream.count()は、他の Stream メソッドと組み合わせると、本当に輝いています。ほとんどの場合、 filter()と組み合わせます。

long countBigCustomers = customers
  .stream()
  .filter(c -> c.getPoints() > 100)
  .count();

assertThat(countBigCustomers).isEqualTo(2L);

この例では、顧客のリストにフィルターを適用し、条件を満たす顧客の数も取得しました。 この場合、100ポイントを超える2人の顧客がいます。

もちろん、フィルターに一致する要素がない場合もあります。

long count = customers
  .stream()
  .filter(c -> c.getPoints() > 500)
  .count();

assertThat(count).isEqualTo(0L);

2.3. count()を高度なフィルターで使用する

filter()に関するチュートリアルでは、このメソッドのより高度なユースケースをいくつか見てきました。 もちろん、このような filter()操作の結果をカウントすることもできます。

複数の基準でコレクションをフィルタリングできます。

long count = customers
  .stream()
  .filter(c -> c.getPoints() > 10 && c.getName().startsWith("Charles"))
  .count();

assertThat(count).isEqualTo(1L);

ここでは、名前が「Charles」で始まり、10ポイントを超える顧客の数をフィルタリングしてカウントしました。

基準を独自のメソッドに抽出し、メソッド参照を使用することもできます。

long count = customers
  .stream()
  .filter(Customer::hasOverHundredPoints)
  .count();

assertThat(count).isEqualTo(2L);

3. 結論

この記事では、 count()メソッドを filter()メソッドと組み合わせて使用してストリームを処理する方法の例をいくつか紹介しました。 count()のその他の使用例については、ストリームとconcat()のマージに関するチュートリアルに示されているような、Streamを返す他のメソッドを確認してください。 。

いつものように、完全なコードはGitHubから入手できます。