java - 在 Java 中过滤列表最简单的方法是什么?

标签 java

目前,当我想要过滤列表时,我使用迭代其元素并将符合我的要求的元素复制到新列表,但通过这种方式,我使用的是 O(2N) 的空间复杂度。有没有更有效的方法来做到这一点?

最佳答案

如果您使用的是 Java 8,您可以简单地使用 myList.stream().filter(); 否则您可以采用Filter Pattern .

public abstract class Filter<T> {
public abstract boolean passes(T object);
public Iterator<T> filter(Iterator<T> iterator) {
return new FilterIterator(iterator);
  }
  public Iterable<T> filter(Iterable<T> iterable) {
  return new Iterable<T>() {
  public Iterator<T> iterator() {
    return filter(iterable.iterator());
    }
  };
 }
private class FilterIterator implements Iterator<T> {
private Iterator<T> iterator;
private T next;
private FilterIterator(Iterator<T> iterator) {
  this.iterator = iterator;
  toNext();
}
public boolean hasNext() {
  return next != null;
}
public T next() {
  if (next == null)
    throw new NoSuchElementException();
  T returnValue = next;
  toNext();
  return returnValue;
}
public void remove() {
  throw new UnsupportedOperationException();
}
private void toNext() {
  next = null;
  while (iterator.hasNext()) {
    T item = iterator.next();
    if (item != null && passes(item)) {
      next = item;
      break;
    }
  }
}
}
}

关于java - 在 Java 中过滤列表最简单的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33318194/

相关文章:

java - 如何在Swing中控制JButton?

java命名空间冲突

java - 为什么 javac 需要引用类的接口(interface)而 ECJ 不需要?

java - 将 string 转换为 int 并获取数字之和

Java套接字连接

java - 如何对齐文件系统 I/O?

Java - 使用模板从字符串中提取键值对

java - Android显示结果一一对应

java - 在 Java 1.7 中第一次对 TreeSet 进行 add 调用时触发了compareTo

java - 使用 Mockito 使用 @Value 时如何模拟 map