我正在开发一个用于收集过滤的小实用程序。我已经为它做了编码。我所做的是迭代原始集合并找到筛选器匹配,如果找到匹配项,则将结果添加到新集合(结果集合)。最后,将结果集合存储到原始集合中。这是一个好主意,收集结果存储回原始收藏吗?我需要以流畅的界面风格设计这个过滤框架。请找到下面的代码。
发布于 2016-10-16 14:58:07
一开始,修改原始集合是非常糟糕的做法,因为您只能应用一次筛选器,而且您应该始终记住,您的原始集合可以更改。这是通向虫子的公路。
同时使用谓词代替过滤器或使过滤器实现谓词,其过滤方式更加灵活方便。
示例:
class Filter<T> implements Predicate<T> {}您可以创建过滤器,然后将其传递给filter方法。
还请记住,您的实用程序应该是线程安全的,最好使用以下方法:
public final CollectionMapper<T> filter(Filter<T> filter) {
Collection<T> result = new ArrayList<>();
Iterator<T> iterator = orginal.iterator();
while (iterator.hasNext()) {
T t = iterator.next();
if (filter.match(t)) {
result.add(t);
}
}
return new CollectionMapper<>(result);
} https://stackoverflow.com/questions/40070960
复制相似问题