ストリームフィルターでの一致のカウント

1. 概要

このチュートリアルでは、_Stream.count()_メソッドの使用を探ります。 具体的には、**適用した_Predicate_ **の一致をカウントするために_count()_メソッドを_filter()_メソッドと組み合わせる方法を確認します。

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

_count()_メソッド自体は、小さいながらも非常に便利な機能を提供します。 また、_Stream.filter()_などの他のツールとうまく組み合わせることができます。
link:/java-stream-filter-lambda[_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()_のさらなる使用例については、link:/java-merge-streams[_concat()_でストリームをマージするチュートリアル]。
いつものように、完全なコードはhttps://github.com/eugenp/tutorials/tree/master/java-streams[GitHub上]で入手できます。