在Java中实现过滤迭代器可以通过自定义一个实现了Iterator接口的过滤器类来实现。下面是一个示例代码:
import java.util.Iterator;
import java.util.List;
public class FilterIterator<T> implements Iterator<T> {
private List<T> list;
private int currentIndex;
private Filter<T> filter;
public FilterIterator(List<T> list, Filter<T> filter) {
this.list = list;
this.filter = filter;
this.currentIndex = 0;
}
@Override
public boolean hasNext() {
while (currentIndex < list.size()) {
T item = list.get(currentIndex);
if (filter.accept(item)) {
return true;
}
currentIndex++;
}
return false;
}
@Override
public T next() {
T item = list.get(currentIndex);
currentIndex++;
return item;
}
@Override
public void remove() {
throw new UnsupportedOperationException("remove() method is not supported.");
}
}
public interface Filter<T> {
boolean accept(T item);
}
上述代码中,FilterIterator类实现了Iterator接口,并通过构造函数接收一个List和一个Filter对象。FilterIterator类中的hasNext()方法会在迭代过程中判断当前元素是否满足过滤条件,如果满足则返回true,否则继续迭代下一个元素。next()方法返回当前元素,并将迭代索引指向下一个元素。remove()方法抛出UnsupportedOperationException异常,因为过滤迭代器一般不支持删除操作。
使用过滤迭代器可以方便地对集合进行过滤操作。以下是一个示例用法:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
Filter<Integer> evenFilter = new Filter<Integer>() {
@Override
public boolean accept(Integer item) {
return item % 2 == 0;
}
};
Iterator<Integer> iterator = new FilterIterator<>(numbers, evenFilter);
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
上述代码中,我们创建了一个包含整数的List,并定义了一个过滤器,用于筛选出偶数。然后使用FilterIterator对numbers集合进行过滤迭代,只输出偶数。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云