1.概要

このクイックチュートリアルでは、Java 8ストリーム内のアイテムを操作するさまざまな方法について学習し、操作が完了したらそれを削除します。

2.セットアップ

最初に

Item

オブジェクトを定義しましょう。これは単一の

int

フィールドを持つ単純なオブジェクトです。

内部値に基づいて、オブジェクトが操作に適しているかどうかを判断するメソッドがあります。

class Item {
    private int value;

   //constructors

    public boolean isQualified() {
        return value % 2 == 0;
    }

    public void operate() {
        System.out.println("Even Number");
    }
}

これで

Stream

のソースを作成できます。これは__Itemのコレクションになります。

List<Item> itemList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    itemList.add(new Item(i));
}

3.アイテムのフィルタリング

  • 多くの場合、アイテムのサブセットを使って何かをしたい場合は、

    Stream#filter

    メソッドを使用できます。最初に何かを削除する必要はありません。

itemList.stream()
  .filter(item -> item.isQualified())
  ...

4.アイテムの操作と削除

4.1.

Collection.removeIf


Streams

を使用して、

Items

のコレクションを繰り返し処理することができます。


Streams

を使用して、

Predicates

として知られるラムダ関数を適用できます。

Streams



Predicates

の詳細については、https://www.baeldung.com/java-8-streams-introduction[here]という記事があります。


Item

が操作対象となるかどうかを決定する

Predicate

を作成できます。

Predicate<Item> isQualified = item -> item.isQualified();

私たちの

Predicate

は、操作したい

Items

をフィルタリングします。

itemList.stream()
  .filter(isQualified)
  .forEach(item -> item.operate());

ストリーム内のアイテムに対する操作が終了したら、以前にフィルタリングに使用したものと同じ

Predicate

を使用してそれらを削除できます。

itemList.removeIf(isQualified);

  • 内部的には、

    removeIf



    Iterator

    を使用してリストを反復処理し、述語を使用して要素を照合します。** リストから一致する要素を削除できるようになりました。

4.2.

Collection.removeAll

他のリストを使って操作された要素を保持し、それからそれらを元のリストから削除することもできます。

List<Item> operatedList = new ArrayList<>();
itemList.stream()
  .filter(item -> item.isQualified())
  .forEach(item -> {
    item.operate();
    operatedList.add(item);
});
itemList.removeAll(operatedList);

イテレータを使用する

removeIf

とは異なり、**

removeAll

は単純な

for-loop

を使用してリスト内の一致する要素をすべて削除します。

5.まとめ

この記事では、Java 8 Streams内の項目を操作してから削除する方法について説明しました。また、追加のリストを使用して、一致した要素をすべて削除することでこれを実行する方法も見ました。

このチュートリアルのソースコードと関連するテストケースはhttps://github.com/eugenp/tutorials/tree/master/core-java-collections/src/test/java/com/baeldung/collection[overly GitHubにあります。]。