我正在尝试使用 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)
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |