2017-12-19 11 views
2

ListをジェネリックスなしでList<MyConcreteType>に変換したいと思います。ジェネリックでリストをjavaにストリームを使用してリストする方法

また、私の具体的なタイプだけをフィルタリングする必要があります。

私の現在のストリーム・ロジックは次のようである:

List list = new ArrayList(); 
Object collect1 = list.stream().filter((o -> o instanceof MyConcreteType)).collect(Collectors.toList()); 

しかし、結果として、私の代わりにListObjectを取得しています。このStreamList<MyConcreteType>に変換する方法はありますか?

+0

'List typedList =(List )リスト'をキャストしてください。 –

+0

@BoristheSpiderしかし、私は最初にフィルタリングする必要があります。他の項目も含めることができるからです。 – pixel

+4

'list.stream()。filter(MyConcreteType.class :: isInstance).map(MyConcreteType.class :: cast).collect(コレクタ.toList()) 'それから' –

答えて

9

使用パラメータ化された型の代わりに、生タイプ、およびMyConcreteTypeにローパスフィルタをオブジェクトにキャストするmapを使用します。

List<?> list = new ArrayList(); 
List<MyConcreteType> collect1 = 
    list.stream() 
     .filter((o -> o instanceof MyConcreteType)) 
     .map(s-> (MyConcreteType) s) 
     .collect(Collectors.toList()); 

または(ボリスコメントで提案されているものと同様の):

List<?> list = new ArrayList(); 
List<MyConcreteType> collect1 = 
    list.stream() 
     .filter(MyConcreteType.class::isInstance) 
     .map(MyConcreteType.class::cast) 
     .collect(Collectors.toList()); 
関連する問題