2

私はこのようないくつかのコードを持っています:

List<ClassB> back = new ArrayList<ClassB>();
for( ClassA classA : getClassAs() )
{
    if( classA instanceof ClassB )
    {
        back.add((ClassB) classA);
    }
}

ClassB は ClassA を拡張します

ラムダジでこれを行うスマートな方法はありますか? IsInstanceOf Matcher があることは知っていますが、「手」でキャストする必要があります。

前もって感謝します

モジュー

4

1 に答える 1

1

これはそれほど効率的ではありませんが、何らかの方向性を提供する可能性があります。

あなたの元のリストは、あなたの投稿で「戻る」と名付けられました:

1.タイプごとに要素を「バック」して新しいリストにフィルタリングします(タイプBのオブジェクトのみを含むリスト)

List bList = Lambda.filter(org.hamcrest.Matchers.instanceOf(B.class),back);

2. コンバーター オブジェクトを使用して、フィルター処理されたオブジェクト リスト bList を List に変換します。

List<B> list = Lambda.convert(bList,new Converter<Object, B>() {
    public B convert(Object from) {
        return (B) from;
        }
    });
于 2012-05-11T17:48:46.240 に答える