オブジェクトのプロパティによって、二つのリストの交差点

Spacejockey:

私は2つのオブジェクトのリストを持っている場合は、次のように、私は交差点を見つけることができます。

public class MyObject {
     String id;
     String someField;
     String someOtherField;
}

List<MyObject> list1;
List<MyObject> list2;

List<MyObject> intersect = list1.stream()
                           .filter(list2::contains)
                           .collect(Collectors.toList());

基づいて、交差点を見つけるために類似した方法があるidの分野はMyObject私は、equalsメソッドをオーバーライドすることはできません。

Nicko:

同様しかし、上記のエランの答えに、おそらく、もう少し効率的には、まず別のセットにIDを引き出すことができます:

Set<String> ids = list2.stream().map(obj -> obj.id).collect(Collectors.toSet());

List<MyObject> intersect = list1.stream()
    .filter(obj -> ids.contains(obj.id))
    .collect(Collectors.toList());

これは、より効率的である理由は、各項目のためということであるlist1IDがであるかどうかを判断することができますlist2O(1)時間でとてもoverallyあなたのランタイムはO(リスト1 + LIST2)であります

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=231337&siteId=1