Посмотрите внимательно, что делает FluentIterable::filter(Class<T>)
, и сравните его с картами каждого предмета с classType
с кастингом. Ваше намерение состоит в том, чтобы отфильтровать эти элементы classType
.
Затем вместо Object.class::cast
следует использовать classType::cast
, поскольку требуемый класс уже передан через Class<T> classType
и может использоваться непосредственно в качестве ссылки на метод. Object.class::cast
приводит к родительскому элементу Object
, от которого наследуется каждый объект.
Вот что вы хотите:
public static <T> List<T> typeFilter(final Collection<?> filter, final Class<T> classType) {
return filter.stream()
.filter(Objects::nonNull)
.filter(item -> item.getClass().equals(classType))
.map(classType::cast)
.collect(Collectors.toList());
}
Редактировать: Как уже упоминалось в другом ответе , можно также использовать filter(classType::isInstance)
.