为什么guava的Iterables.filter想要谓词中的超类?

时间:2014-03-27 21:07:28

标签: java guava

为什么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

1 个答案:

答案 0 :(得分:6)

您的编译错误是由于您将Iterator传递给Iterables.filter,因此需要Iterable作为其第一个参数。你想要Iterators.filter

这与您的实际问题无关,但是自从您提问:Iterables.filter需要Predicate<? super T>,以便您可以使用Predicate<Object>来过滤List<String> 。如果谓词可以处理您要过滤的类型的某些超类型,则可以使用该谓词。