italktothewind:
私はこの方法があります:
public static <T> List<T> flat(List<T>... lists){
return Stream.of(lists)
.filter(Objects::nonNull)
.flatMap(List::stream)
.collect(toList());
}
アイデアはフラットにリストのリストであり、同じタイプのリストを返します。
それを仮定A
してB
拡張しますC
。これは動作しません:
List<A> listOfA;
List<B> listOfB;
List<C> listOfC = flat(listOfA, listOfB);
ためList<A>
ではありませんList<C>
!
誰もが私が何をしようとしている認めているジェネリック医薬品とフラットなメソッドシグネチャを作成する方法を知っていますか?
ありがとう!
xingbin:
場合はA
拡張しC
、B
拡張しC
た後、List<A>
およびList<B>
に割り当てていますList<? extends C>
。
あなたはそれをこのように宣言することができるように:
public static <T> List<T> flat(List<? extends T>... lists)
テスト:
public static void main(String[] args) {
List<String> listOfString = List.of("sss"); // String extends from Object
List<Integer> listOfInt = List.of(1); // Integer extends from Object
List<Object> list = flat(listOfString, listOfInt);
System.out.println(list); // [sss, 1]
}