1つのストリームに複数のフィルター

Umair Ansari

Java 8ストリームを使用してコードを記述しましたが、リファクタリングしようとしています。

さまざまな基準でリストをフィルタリングし、新しいリストに保存しました。すべての基準を一度にフィルタリングし、結果のグループをリストに保存する方法はありますか?それを説明する方法がわかりません。

これが私のコードで、リファクタリングする必要があります。

List<A> finalList = new ArrayList<>();
List<A> aList= new ArrayList<>();

A objectA = new A();

List<B> bList = new ArrayList<>();
bList.add(new B(5700));
bList.add(new B(5750));
bList.add(new B(5800));
bList.add(new B(5812));
bList.add(new B(5803));
bList.add(new B(5802));

objectA.setMyList(bList);

aList.add(objectA);

aList.stream()
    .forEach(
        a -> {
            if(!a.getMyList.isEmpty()){
                List<B> groupA =
                    a.getMyList.stream()
                        .filter(b -> b.getType() == 5700 || b.getType() == 5750)
                        .collect(Collectors.toList());
                List<B> groupB =
                    a.getMyList.stream()
                        .filter(b -> b.getType() == 5800 || b.getType() == 5810)
                        .collect(Collectors.toList());
                List<B> groupC =
                    a.getMyList.stream()
                        .filter(b -> b.getType() == 5802 || b.getType() == 5812)
                        .collect(Collectors.toList());
                List<B> groupD =
                    a.getMyList.stream()
                        .filter(b -> b.getType() == 5803 || b.getType() == 5813)
                        .collect(Collectors.toList());



                if(!groupA.isEmpty()){
                    finalList.add(getAWithGroupList(a, groupA));
                }
                if(!groupB.isEmpty()){
                    finalList.add(getAWithGroupList(a, groupB));
                }
                if(!groupC.isEmpty()){
                    finalList.add(getAWithGroupList(a, groupC));
                }
                if(!groupD.isEmpty()){
                    finalList.add(getAWithGroupList(a, groupD));
                }
             }
        }
    );


private A getAWithGroupList(A a, List<B> group) {
    A a = (A) a.clone();
    a.setMyList(group);
    return a;
}

どんな助けや提案もいただければ幸いです。

ありがとう。

ドルカヤン

シンプル。繰り返しコードをメソッドでラップします。

private List<B> listifyAndfilter(A a, Predicate<List<B>> check){
    return a.getMyList.stream().filter(check).collect(Collectors.toList());
}

そして、あなたはすることができます:

List<B> groupA = listifyAndFilter(a, b -> b.getType() == 5700 || b.getType() == 5750),
        groupB = listifyAndFilter(a, b -> b.getType() == 5800 || b.getType() == 5810),
        groupC = listifyAndFilter(a, b -> b.getType() == 5802 || b.getType() == 5812),
        groupD = listifyAndFilter(a, b -> b.getType() == 5803 || b.getType() == 5813);

行末のコンマに注意してください。

無関係ですが便利です:次のifステートメントを組み合わせることもできます:

if(!groupA.isEmpty()){
    finalList.add(getAWithGroupList(a, groupA));
}
if(!groupB.isEmpty()){
    finalList.add(getAWithGroupList(a, groupB));
}
if(!groupC.isEmpty()){
    finalList.add(getAWithGroupList(a, groupC));
}
if(!groupD.isEmpty()){
    finalList.add(getAWithGroupList(a, groupD));
}

このfor-eachループに:

for (List<B> group : new List<B>[]{groupA, groupB, groupC, groupD}) // Packs the lists in an array and iterates over the array
    if(!group.isEmpty())
        finalList.add(getAWithGroupList(a, group));

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Javaの8ストリーム複数のフィルタ

分類Dev

1つの画面にフィルターを備えた複数のReact管理者リスト

分類Dev

別のリストに基づく1つのリストのストリームフィルター

分類Dev

Wordpressの高度なカスタムフィールド1つの投稿内の複数の外部リンクの外部リンクテキスト

分類Dev

1つのフィールドに複数のパラメータを使用してフォームでクエリにアクセスする

分類Dev

1つのプラグインに複数のカスタムフィルターがありますか?

分類Dev

R:複数のリストを1つのデータフレームにマージする

分類Dev

Java 8ストリーム:複数のフィルターと複雑な条件

分類Dev

SSRS-複数の列に1つのフィルター

分類Dev

Javaのストリーム:複数の範囲とフィルター

分類Dev

Javaストリームは/収集:複数のキーに複数のフィールドを持つ一つのアイテムをマップ

分類Dev

複数のストリームでのRxJSフィルタリング

分類Dev

jq--同じキーの複数の値に対するストリームフィルター

分類Dev

複数のフィルター上のJava8ストリームフィルター

分類Dev

剣道ツリーリストの1つのフィールドで複数のボタンを使用するにはどうすればよいですか?

分類Dev

PDF:1つの列リストを複数の列のデータフレームに変換する方法は?-複数の列へのグループ内のサブグループ内の人々のリスト

分類Dev

複数のリストを持つデータフレームから値をフィルタリングするためのforループの置き換え

分類Dev

1つのポストメタ配列に複数のフィールドを保存する

分類Dev

複数のストリームで1つのファイルに書き込む

分類Dev

複数のパラメータによってJava8ストリームフィルタ

分類Dev

JSONデータの複数のリストを1つのファイルからPandasに読み込む方法

分類Dev

Laravelフォーム検証の複数のフィールドに1つのカスタムメッセージを設定する

分類Dev

SpamAssassin-複数のルールを持つカスタムフィルター?

分類Dev

FlaskWTForms-複数のフォームフィールドに基づくカスタムバリデーター

分類Dev

複数のフィルタークエリと1つのフィルタークエリのSolrのパフォーマンスの違い

分類Dev

Javaストリームフィルターは複数の基準述語に一致します

分類Dev

複数の基準に従ってリスト内のC#フィルターアイテム

分類Dev

複数のリストのアイテムにフィルター機能を適用する方法は?

分類Dev

リスト上の複数のデータフレーム列をフィルタリングする

Related 関連記事

  1. 1

    Javaの8ストリーム複数のフィルタ

  2. 2

    1つの画面にフィルターを備えた複数のReact管理者リスト

  3. 3

    別のリストに基づく1つのリストのストリームフィルター

  4. 4

    Wordpressの高度なカスタムフィールド1つの投稿内の複数の外部リンクの外部リンクテキスト

  5. 5

    1つのフィールドに複数のパラメータを使用してフォームでクエリにアクセスする

  6. 6

    1つのプラグインに複数のカスタムフィルターがありますか?

  7. 7

    R:複数のリストを1つのデータフレームにマージする

  8. 8

    Java 8ストリーム:複数のフィルターと複雑な条件

  9. 9

    SSRS-複数の列に1つのフィルター

  10. 10

    Javaのストリーム:複数の範囲とフィルター

  11. 11

    Javaストリームは/収集:複数のキーに複数のフィールドを持つ一つのアイテムをマップ

  12. 12

    複数のストリームでのRxJSフィルタリング

  13. 13

    jq--同じキーの複数の値に対するストリームフィルター

  14. 14

    複数のフィルター上のJava8ストリームフィルター

  15. 15

    剣道ツリーリストの1つのフィールドで複数のボタンを使用するにはどうすればよいですか?

  16. 16

    PDF:1つの列リストを複数の列のデータフレームに変換する方法は?-複数の列へのグループ内のサブグループ内の人々のリスト

  17. 17

    複数のリストを持つデータフレームから値をフィルタリングするためのforループの置き換え

  18. 18

    1つのポストメタ配列に複数のフィールドを保存する

  19. 19

    複数のストリームで1つのファイルに書き込む

  20. 20

    複数のパラメータによってJava8ストリームフィルタ

  21. 21

    JSONデータの複数のリストを1つのファイルからPandasに読み込む方法

  22. 22

    Laravelフォーム検証の複数のフィールドに1つのカスタムメッセージを設定する

  23. 23

    SpamAssassin-複数のルールを持つカスタムフィルター?

  24. 24

    FlaskWTForms-複数のフォームフィールドに基づくカスタムバリデーター

  25. 25

    複数のフィルタークエリと1つのフィルタークエリのSolrのパフォーマンスの違い

  26. 26

    Javaストリームフィルターは複数の基準述語に一致します

  27. 27

    複数の基準に従ってリスト内のC#フィルターアイテム

  28. 28

    複数のリストのアイテムにフィルター機能を適用する方法は?

  29. 29

    リスト上の複数のデータフレーム列をフィルタリングする

ホットタグ

アーカイブ