複数のパラメーターでストリームデータをフィルター処理する方法

SriD:

S3に保存されているJSONファイルのソースのリストがあります。リストのいくつかのフィールドに検索フィルターを提供する必要があります。データをフィルタリングできる必要なすべてのフィールドを含むビルダークラスを作成しました。

次に、Javaストリームを使用して、ユーザーが提供するパラメーターに基づいてデータにフィルターを適用します。ユーザーは、6つのパラメーターすべてを提供するか、必要に応じて2つまたは3つのパラメーターのみを渡すことができます。たとえば、ユーザーは6つのうち2つのパラメーターのみを提供します。与えられた2つのパラメーターに基づいてデータをフィルター処理し、値がnullである4つのパラメーターを無視できます。

public class ListOfFields {
    private String country;
    @JsonProperty("product")
    private String product;
    private String transactionId;
    private String sourceBy;
    private String category;
    private String specialTag;
    private String organicTag;
    private String successTag;
    private String speedTag;
    private String foodTag;
    private String costPrice;
    private String fruitType;
    private String fruitVendorId;    
} 

以下はビルダークラスです

public class ProductClass {
    @Builder.Default
    private String country = 'UnitedStates';
    private String sourceBy;
    private Boolean specialTag;
    private String category;
    private Boolean priceTag;
    private String fruitType;
}  

ユーザーが製品を取得するために電話をかけることができる以下のメソッド

public String getProduct(ProductClass productQuery) {      
    List<ListOfFields> result = listOfFields // (the declaration is made before in the class as private List<ListOfFields> listOfFields;)
            .stream().filter(productQuery::match)
            .collect(Collectors.toList());

上記の一致関数として動的述語を思いつくにはどうすればよいですか?ユーザーから提供されたパラメーターを1、2、3、4のいずれかでフィルターできるはずです。ユーザーがフィルター条件に値を渡さなかったパラメーターは使用しません。

ナマン:

キーがない場合のProductClass入力とnullとして考慮します。Predicate実際のクエリパラメータを受け取るメソッドを使用して、可能なのリストを定義できます。

private static List<Predicate<ListOfFields>> predicates(ProductClass product) {
    return List.of(
            lof -> product.priceTag != null && product.priceTag,
            lof -> product.specialTag != null && product.specialTag,
            lof -> product.country != null && product.country.equals(lof.country),
            lof -> product.sourceBy != null && product.sourceBy.equals(lof.sourceBy),
            lof -> product.category != null && product.category.equals(lof.category),
            lof -> product.fruitType != null && product.fruitType.equals(lof.fruitType)
    );
}

これに到達すると、リストは次のようreduceな単一を表すためにdになりますPredicate

private static Predicate<ListOfFields> matchAll(List<Predicate<ListOfFields>> queries) {
    return queries.stream()
            .reduce(Predicate::and)
            .orElse(p -> true);
}

これstreamで、タイプのオブジェクトにINGしながら、この述語を簡単に利用できますListOfFields-

List<ListOfFields> result = listOfFields.stream()
        .filter(matchAll(predicates(productQuery)))
        .collect(Collectors.toList());

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

MongoDBプロバイダーで複数のパラメーターをフィルター処理する

分類Dev

Angular 2ルーターベータで複数のパラメーターを処理する方法は?

分類Dev

Spring-MVCで複数のパラメーターを使用してリクエストを処理する方法

分類Dev

Julia:複数のパラメーターを必要とする関数で配列をフィルター処理する方法は?

分類Dev

DC /クロスフィルターディメンションで複数の値をフィルター処理する方法は?

分類Dev

getリクエストで複数のパラメーターを処理するSpring Boot

分類Dev

特定のパラメーターで構造体の配列をフィルター処理する方法は?

分類Dev

カスタムフィルターではなく、角度フィルター関数で複数のパラメーターを渡す方法

分類Dev

SASストアードプロセスで複数のフィルターを処理する方法

分類Dev

同じ階層の複数のアイテムでフィルター機能のメジャーをフィルター処理する方法

分類Dev

Javaストリームフィルターを使用して、プロパティ名で重複をフィルター処理する

分類Dev

Javaで複数のパラメータに応じて、リスト上のデータをフィルタリングするには?

分類Dev

LINQ でさまざまなパラメーターを使用してリストをフィルター処理する方法

分類Dev

JSは複数のパラメーターをフィルター処理します

分類Dev

複数の列でパンダデータフレームをフィルタリングする方法

分類Dev

複数列のsqliteデータベースで複数のデータをフィルタリングする方法

分類Dev

反復フィルター:複数のタプルのリストをフィルター処理するにはどうすればよいですか?

分類Dev

Ajaxで変更される複数のデータ/パラメーターを処理する-Wordpress

分類Dev

複数の変数を持つデータフレーム内のレコード数で変数をフィルター処理する

分類Dev

ArcGisフィーチャレイヤーの複数のグラフィックジオメトリに基づいてデータをフィルター処理するにはどうすればよいですか?

分類Dev

MVC:次のコードを使用して、複数のパラメーターでテーブルをフィルター処理します

分類Dev

パンダデータフレームからタプルの複数のリストを作成する方法

分類Dev

SSRSの複数値パラメーターに対して、連結された値でフィールドをフィルター処理します

分類Dev

.csvデータフレームのリストを処理する方法

分類Dev

nuxt.jsでルートパラメータの更新を処理する方法

分類Dev

動的に作成されたフィルターをSQLServerのストアドプロシージャのパラメーターとして渡し、データをフィルター処理するにはどうすればよいですか?

分類Dev

2つのパラメーターを使用して配列をフィルター処理する方法は?

分類Dev

pandasデータフレームで複数のテキストフィールドを連結する方法

分類Dev

異なるパラメータを持つ複数のsklearnアルゴリズムを複数のデータフレームに適用する方法は?

Related 関連記事

  1. 1

    MongoDBプロバイダーで複数のパラメーターをフィルター処理する

  2. 2

    Angular 2ルーターベータで複数のパラメーターを処理する方法は?

  3. 3

    Spring-MVCで複数のパラメーターを使用してリクエストを処理する方法

  4. 4

    Julia:複数のパラメーターを必要とする関数で配列をフィルター処理する方法は?

  5. 5

    DC /クロスフィルターディメンションで複数の値をフィルター処理する方法は?

  6. 6

    getリクエストで複数のパラメーターを処理するSpring Boot

  7. 7

    特定のパラメーターで構造体の配列をフィルター処理する方法は?

  8. 8

    カスタムフィルターではなく、角度フィルター関数で複数のパラメーターを渡す方法

  9. 9

    SASストアードプロセスで複数のフィルターを処理する方法

  10. 10

    同じ階層の複数のアイテムでフィルター機能のメジャーをフィルター処理する方法

  11. 11

    Javaストリームフィルターを使用して、プロパティ名で重複をフィルター処理する

  12. 12

    Javaで複数のパラメータに応じて、リスト上のデータをフィルタリングするには?

  13. 13

    LINQ でさまざまなパラメーターを使用してリストをフィルター処理する方法

  14. 14

    JSは複数のパラメーターをフィルター処理します

  15. 15

    複数の列でパンダデータフレームをフィルタリングする方法

  16. 16

    複数列のsqliteデータベースで複数のデータをフィルタリングする方法

  17. 17

    反復フィルター:複数のタプルのリストをフィルター処理するにはどうすればよいですか?

  18. 18

    Ajaxで変更される複数のデータ/パラメーターを処理する-Wordpress

  19. 19

    複数の変数を持つデータフレーム内のレコード数で変数をフィルター処理する

  20. 20

    ArcGisフィーチャレイヤーの複数のグラフィックジオメトリに基づいてデータをフィルター処理するにはどうすればよいですか?

  21. 21

    MVC:次のコードを使用して、複数のパラメーターでテーブルをフィルター処理します

  22. 22

    パンダデータフレームからタプルの複数のリストを作成する方法

  23. 23

    SSRSの複数値パラメーターに対して、連結された値でフィールドをフィルター処理します

  24. 24

    .csvデータフレームのリストを処理する方法

  25. 25

    nuxt.jsでルートパラメータの更新を処理する方法

  26. 26

    動的に作成されたフィルターをSQLServerのストアドプロシージャのパラメーターとして渡し、データをフィルター処理するにはどうすればよいですか?

  27. 27

    2つのパラメーターを使用して配列をフィルター処理する方法は?

  28. 28

    pandasデータフレームで複数のテキストフィールドを連結する方法

  29. 29

    異なるパラメータを持つ複数のsklearnアルゴリズムを複数のデータフレームに適用する方法は?

ホットタグ

アーカイブ