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());
これは、より効率的である理由は、各項目のためということであるlist1
IDがであるかどうかを判断することができますlist2
O(1)時間でとてもoverallyあなたのランタイムはO(リスト1 + LIST2)であります