Лямбдай класс литья - PullRequest
       25

Лямбдай класс литья

2 голосов
/ 23 марта 2012

У меня есть такой код:

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

ClassB расширяет ClassA

Есть ли какой-нибудь умный способ сделать это в лямбдаже? Я знаю, что есть IsInstanceOf Matcher, но я должен выполнить приведение «вручную».

спасибо заранее

mojoo

1 Ответ

1 голос
/ 11 мая 2012

Это не так эффективно, но может дать направление:

Ваш оригинальный список был назван "назад" в вашем сообщении:

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;
        }
    });
...