如何使用Google Collections Collections2.filter方法实现不同的谓词?
答案 0 :(得分:9)
如果我理解正确,我不确定Predicate是否是正确的解决方案:
创建这样的谓词需要维护某种状态(即:维护已经看过的一组事物)。在javadoc中明确建议这样做。
获取集合中不同项目的常用方法是将它们全部添加到集合中。即:
Set<T> uniqueItems = Sets.newHashSet(collectionWithPotentialDuplicates);
如果<T>
上的equals()和hashCode()方法没有按照你想要的方式定义唯一性,那么你应该编写一个在Collection<T>
和{{1}上运行的实用程序方法}}返回Function<T, Object>
类型的项目,这些项目在使用T
转换后是唯一的
答案 1 :(得分:0)
我的解决方案:
// Create unique list
final Set<String> unique = new HashSet<String>(FluentIterable
.from(sourceList)
.transform(new Function<T, String>() {
@Override
public String apply(T input) {
// Here we create unique entry
return input.toString();
}
}).toSet());
// Filter and remove duplicates
return FluentIterable
.from(prePscRowList)
.filter(new Predicate<T>() {
@Override
public boolean apply(T input) {
boolean exist = false;
if(unique.contains(input.toString())){
unique.remove(input.toString());
exist = true;
}
return exist;
}
}).toList();