类型列表中的方法 transform() 不适用

Jas*_*son 0 java guava

我正在尝试使用 Guava 函数从列表中删除重复项。这样做的原因是“重复”是基于列表中两个项目之间的比较,而这些对象是否“重复”需要相当多的逻辑。

这是我对该功能的尝试:

private Function<List<BaseRecord>, List<BaseRecord>> removeDuplicates = 
        new Function<List<BaseRecord>, List<BaseRecord>>() {

    public List<BaseRecord> apply(List<BaseRecord> records) {


        List<BaseRecord> out = Lists.newArrayList();


        PeekingIterator<BaseRecord> i = Iterators.peekingIterator(records.iterator());

        while (i.hasNext()) {
            BaseRecord current = i.next();

            boolean isDuplicate = false;

            if ( i.hasNext() ) {

                BaseRecord next = i.peek();


                // use a ComparisonChain to compare certain fields, removed
                isDuplicate = compareCertainObjects(o1, o2);

            }

            if ( !isDuplicate ) {
                out.add(current);
            }
        }


        return out;
    }

};
Run Code Online (Sandbox Code Playgroud)

然后我尝试用 Lists.transform(originalRecords, removeDuplicates) 调用它

不幸的是,Eclipse 并不高兴:

The method transform(List<F>, Function<? super F,? extends T>) in the type Lists is not applicable for the arguments (List<BaseRecord>, Function<List<BaseRecord>,List<BaseRecord>>).
Run Code Online (Sandbox Code Playgroud)

BaseRecord 是一个抽象类,至少有两个子类型。被比较的字段都是 BaseRecord 的父类,而不是子类。

我只是犯了一个愚蠢的错误吗?

小智 5

原因是 - 您正在使用包 java.blah-blah.function.Function 中的函数。但是番石榴想要这里

import com.google.common.base.Function;
Run Code Online (Sandbox Code Playgroud)