为什么guava' Iterables.filter
想要谓词中的超类?
public static <T> Iterable<T> filter(final Iterable<T> unfiltered, final Predicate<? super T> predicate)
你能告诉我如何过滤自定义类的对象吗?我试过这个
我试过这个
Iterator<TaskSchedule> it = tsp.getAllItems(getCustomerId(), "getId", filter);
com.google.common.collect.Iterables.filter(it, new Predicate<Object>() {
@Override
public boolean apply(Object input)
{
return false;
}
});
失败并出现以下编译错误。我很困惑。
错误:(132,44)java: C:\工作\ sideprojects \ ZZZZ \ SVN \ inlineschedule特征\测试\黄瓜\ java的\ ZZZZ \ COM \ ZZZ \黄瓜\ DBTestDriver.java:132: 找不到符号符号:方法 filter(java.util.Iterator,&gt;)location:class com.google.common.collect.Iterables
我正在使用JDK6
答案 0 :(得分:6)
您的编译错误是由于您将Iterator
传递给Iterables.filter
,因此需要Iterable
作为其第一个参数。你想要Iterators.filter
。
这与您的实际问题无关,但是自从您提问:Iterables.filter
需要Predicate<? super T>
,以便您可以使用Predicate<Object>
来过滤List<String>
。如果谓词可以处理您要过滤的类型的某些超类型,则可以使用该谓词。