Java 8 ラムダ式を使用して、あるタイプのリストをそのサブタイプのリストに変換する方法 質問する

Java 8 ラムダ式を使用して、あるタイプのリストをそのサブタイプのリストに変換する方法 質問する

これを Java ではなく C# で実行する方法しか見つからないようです。

を持っていますが、そのリスト内のすべての要素が実際にはCalledList<TypeX>のサブクラスであることを知っています。TypeXTypeY

List<TypeX>を受け入れて返すラムダ式をどのように記述すればよいでしょうかList<TypeY>?

ベストアンサー1

この例では、次のクラスを使用します。

class TypeX {}
class TypeY extends TypeX {}

次に、次のものを用意しますList<TypeX>

final List<TypeX> xList = ...

必要なのは、次のメソッド参照を使用するだけですTypeY.class.cast

final List<TypeY> yList = xList.stream()
                               .map(TypeY.class::cast)
                               .collect(toList());

filter()エラーの原因となる項目を除外することもできます。

final List<TypeY> yList = xList.stream()
                               .filter(TypeY.class::isInstance)
                               .map(TypeY.class::cast)
                               .collect(toList());

使用例:

import static java.util.stream.Collectors.toList;

おすすめ記事