skidalgo:
すべての与えられたTypeA
内のインスタンスList<TypeA>
のインスタンス持っSubTypeB
superTypeBフィールドにセットを、私は、重複除外するために必要なTypeA
重複手段の値リストからインスタンスpropertyA
とpropertyB
のSubTypeB
両方が一致。Javaの8ストリームAPIでこれを行う方法はありますか?
public class TypeA {
private SuperTypeB superTypeB;
public SuperTypeB getSuperTypeB(){ return superTypeB; }
}
public class SuperTypeB {
private String propertyX;
}
public class SubTypeB extends SuperTypeB {
private String propertyA;
private String propertyB;
public String getPropertyA(){ return propertyA; }
public String getPropertyB(){ return propertyB; }
}
また:
あなたはしないように確認する必要がありmap
ますが、前にfilter
同じ型に収集します。使用するdistinctByKey
ユーティリティを、あなたはさらにに選択することができますcollect
するList
ように:
List<TypeA> filteredTypeAs = typeAList.stream()
.filter(distinctByKey(s -> {
SubTypeB subTypeB = (SubTypeB) s.getSuperTypeB();
return Arrays.asList(subTypeB.getPropertyA(), subTypeB.getPropertyB());
}))
.collect(Collectors.toList());
注:これは、すべてのサブタイプがなくてキャストすることが可能であることを疑問に述べたような仮定に依存しているinstanceof
チェック。