条件に基づいて配列リストのオブジェクトフィールド値を比較し、条件がtrueの場合は削除します

我が神よ :

これらがJava Beanクラスであると仮定します

class Camp {
      int number;
      User userId;
      Date createDt;
 }

class User {
  private String id;
  private String name;
}

Camp同じuserIdを持っているがcreateDtが小さいタイプのarrayListからそれらのレコードを削除したい

これがリストだとしましょう-

// ... the list is already populated
List<Camp> usersList = populatedListOfUser();

そしてこれが方法です-

private List<Camp> skipByComparison(List<Camp> usersList){
    List<Camp> mainList = new ArrayList<Camp>();
    Set<Camp> s = new TreeSet<Camp>(new Comparator<Camp>() {

        @Override
        public int compare(Camp o1, Camp o2) {
            if(o1.getUserId().getId().equals(o2.getUserId().getId())) {
                if(o1.getCreatedTs().compareTo(o2.getCreatedTs()) < 0) {
                    usersList.remove(o1);
                    return -1;
                } else {
                    return 1;
                }
            } else {
                return 0;
            }
        }
    });
    s.addAll(usersList);
    mainList.addAll(s);
}

だから私が電話するとき-

usersList = skipByComparison(usersList);

Camp同じuserIdを持っているがcreateDtが小さいタイプのarrayListからレコードを取得しません

例のために。私は同じと2つのレコードを持っている場合Camp.getUser().getId()が、record 1持っているCreateDtよりも大きいrecord 2、私は削除しますrecord 2

名前:

次のようにコードを更新できます。

private List<Camp> skipByComparison(List<Camp> usersList){
    Set<Camp> s = new TreeSet<>((o1, o2) -> o1.getUserId().getId().equals(o2.getUserId().getId()) ? 
            o1.getCreateDt().compareTo(o2.getCreateDt()) : 0);
    s.addAll(usersList);
    return new ArrayList<>(s);
}

またはCollectorsストリームを使用してそれを解決するには、次のようにします:

private List<Camp> skipByComparisonStream(List<Camp> usersList) {
    return new ArrayList<>(usersList.stream()
            .collect(Collectors.toMap(c -> c.getUserId().getId(),
                    Function.identity(),
                    (a, b) -> a.getCreateDt().after(b.getCreateDt()) ? a : b))
            .values());
}

説明Comparator現在、2つの日付が可能である場合、値は返されません。equalおそらく、そのcompareToためのDateクラス実装に依存する必要あります

Set<Camp> s = new TreeSet<>(new Comparator<Camp>() {
    @Override
    public int compare(Camp o1, Camp o2) {
        return o1.getUserId().getId().equals(o2.getUserId().getId()) 
                ? o1.getCreateDt().compareTo(o2.getCreateDt()) : 0;
    }
});

これを行うと、ラムダ式を次のように使用して簡略化できます。

Set<Camp> s = new TreeSet<>((o1, o2) -> o1.getUserId().getId().equals(o2.getUserId().getId())
        ? o1.getCreateDt().compareTo(o2.getCreateDt()) : 0);

私が行った残りの変更は、実行順序を単純化し、冗長な初期化をクリーンアップすることでした。

余談ですが、別の質問で修正されました代わりjava.time.LocalDatecreateDt属性に使用することをお勧めます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

フィールドを比較して、2番目の配列に基づいて最初の配列オブジェクトの値を更新します

分類Dev

別の値の配列に基づいてオブジェクトの配列をフィルタリングし、空のリストを返します

分類Dev

条件に基づいてオブジェクトの3つのリストを結合/マージします

分類Dev

Angular-オブジェクトの別の配列の値に基づいてオブジェクトの配列をフィルタリングします

分類Dev

MongoDBは、条件に基づいてオブジェクトフィールドをカウントします

分類Dev

javascriptは、条件に基づいてオブジェクトのネストされた配列からプロパティ値を返します

分類Dev

同じオブジェクトのいくつかのリストが与えられた場合、フィールド値に基づいてそれらをグループ化して結合します

分類Dev

条件に基づいてオブジェクトの配列をどのようにフィルタリングしますか

分類Dev

Javaストリーム、オブジェクトの条件に基づいてフィルタリング、値を文字列と配列に設定

分類Dev

Javascript-別の配列に存在するキーの値に基づいてオブジェクトの配列をフィルタリングします

分類Dev

フィールド値Vue.jsに基づいてリスト内のオブジェクトを削除します

分類Dev

オブジェクトの配列の要素でフィールドがtrueの場合、divを表示します

分類Dev

配列は、キーと値のペアに基づいて重複オブジェクトを削除し、合計を返す必要があります[fiddle]

分類Dev

UnderscoreJS:条件に基づいてオブジェクトの配列をトリミングします

分類Dev

ネストされた配列内の条件に基づいてオブジェクトを選択します

分類Dev

値に基づいて、JavaScriptの深くネストされたオブジェクトの配列をフィルタリングします

分類Dev

配列内のオブジェクト内のフィールドに基づいてすべての値を合計するMongodbAggregateクエリ

分類Dev

JavaScriptは、キー値の配列に基づいてリストからオブジェクトを削除します

分類Dev

配列オブジェクトjavascriptの条件チェックに基づいてブール値を返す方法

分類Dev

オブジェクトフィールドに基づいてオブジェクトの配列を減らします

分類Dev

javascriptを使用して別の配列値に基づいてオブジェクトの配列をフィルタリングする方法は?

分類Dev

Javascript(UnderscoreJS)の2番目のオブジェクト配列に基づいてオブジェクト配列1をフィルタリングします

分類Dev

オブジェクトに別の配列に値が存在する属性が含まれている場合は、オブジェクトの配列をフィルタリングします

分類Dev

最新のMongoDBC#ドライバーを使用して、複数の条件に基づいて複雑な配列オブジェクトのネストされた配列内の要素を削除するにはどうすればよいですか?

分類Dev

オブジェクトフィールドに基づいてオブジェクトで構成される配列から平均値を取得します

分類Dev

外側のオブジェクトの値に等しい内側のオブジェクトの値に基づいてオブジェクトの配列をフィルタリングします

分類Dev

戻り値に基づいてオブジェクトの配列をフィルタリングしようとしています

分類Dev

オブジェクトフィールドの値に基づいて、JavaScriptの「オブジェクトの配列」のインデックスを検索します

分類Dev

それはPHPを使用して、特定の条件に一致する場合、トラブルの削除は、JSON配列からオブジェクト。コードはエラーを投げています

Related 関連記事

  1. 1

    フィールドを比較して、2番目の配列に基づいて最初の配列オブジェクトの値を更新します

  2. 2

    別の値の配列に基づいてオブジェクトの配列をフィルタリングし、空のリストを返します

  3. 3

    条件に基づいてオブジェクトの3つのリストを結合/マージします

  4. 4

    Angular-オブジェクトの別の配列の値に基づいてオブジェクトの配列をフィルタリングします

  5. 5

    MongoDBは、条件に基づいてオブジェクトフィールドをカウントします

  6. 6

    javascriptは、条件に基づいてオブジェクトのネストされた配列からプロパティ値を返します

  7. 7

    同じオブジェクトのいくつかのリストが与えられた場合、フィールド値に基づいてそれらをグループ化して結合します

  8. 8

    条件に基づいてオブジェクトの配列をどのようにフィルタリングしますか

  9. 9

    Javaストリーム、オブジェクトの条件に基づいてフィルタリング、値を文字列と配列に設定

  10. 10

    Javascript-別の配列に存在するキーの値に基づいてオブジェクトの配列をフィルタリングします

  11. 11

    フィールド値Vue.jsに基づいてリスト内のオブジェクトを削除します

  12. 12

    オブジェクトの配列の要素でフィールドがtrueの場合、divを表示します

  13. 13

    配列は、キーと値のペアに基づいて重複オブジェクトを削除し、合計を返す必要があります[fiddle]

  14. 14

    UnderscoreJS:条件に基づいてオブジェクトの配列をトリミングします

  15. 15

    ネストされた配列内の条件に基づいてオブジェクトを選択します

  16. 16

    値に基づいて、JavaScriptの深くネストされたオブジェクトの配列をフィルタリングします

  17. 17

    配列内のオブジェクト内のフィールドに基づいてすべての値を合計するMongodbAggregateクエリ

  18. 18

    JavaScriptは、キー値の配列に基づいてリストからオブジェクトを削除します

  19. 19

    配列オブジェクトjavascriptの条件チェックに基づいてブール値を返す方法

  20. 20

    オブジェクトフィールドに基づいてオブジェクトの配列を減らします

  21. 21

    javascriptを使用して別の配列値に基づいてオブジェクトの配列をフィルタリングする方法は?

  22. 22

    Javascript(UnderscoreJS)の2番目のオブジェクト配列に基づいてオブジェクト配列1をフィルタリングします

  23. 23

    オブジェクトに別の配列に値が存在する属性が含まれている場合は、オブジェクトの配列をフィルタリングします

  24. 24

    最新のMongoDBC#ドライバーを使用して、複数の条件に基づいて複雑な配列オブジェクトのネストされた配列内の要素を削除するにはどうすればよいですか?

  25. 25

    オブジェクトフィールドに基づいてオブジェクトで構成される配列から平均値を取得します

  26. 26

    外側のオブジェクトの値に等しい内側のオブジェクトの値に基づいてオブジェクトの配列をフィルタリングします

  27. 27

    戻り値に基づいてオブジェクトの配列をフィルタリングしようとしています

  28. 28

    オブジェクトフィールドの値に基づいて、JavaScriptの「オブジェクトの配列」のインデックスを検索します

  29. 29

    それはPHPを使用して、特定の条件に一致する場合、トラブルの削除は、JSON配列からオブジェクト。コードはエラーを投げています

ホットタグ

アーカイブ