リストオブジェクトのフィールドのプロパティによって、フィルタリスト

skidalgo:

すべての与えられたTypeA内のインスタンスList<TypeA>のインスタンス持っSubTypeBsuperTypeBフィールドにセットを、私は、重複除外するために必要なTypeA重複手段の値リストからインスタンスpropertyApropertyBSubTypeB両方が一致。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チェック。

おすすめ

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