【问题标题】:Iterator takes in string but I need to get elements at even indices?迭代器接受字符串,但我需要在偶数索引处获取元素?
【发布时间】:2021-11-22 16:56:05
【问题描述】:

您好,我正在创建一个 EvenIterator,它会返回偶数索引处的元素,例如:

public class EvenIterator implements java.util.Iterator<String> {

    
private Iterator<String> iter;

public EvenIterator(Iterable<String> iter) {
  this.iter = iter.iterator();
  createEvenListIterator();
}

private void createEvenListIterator() {
  
  LinkedList<String> list = new LinkedList<String>();
  while(iter.hasNext()) {
    String value = iter.next();
    if(value%2 == 0) {
      list.add(value);
    }
  }
  
  iter = list.iterator();
}

public boolean hasNext() {
  return iter.hasNext();
}

public String next() {
  if(iter.hasNext()) {
    return iter.next();
  } else
    throw new NoSuchElementException();
}

public void remove() {
  throw new UnsupportedOperationException();
}

}

我在if(value%2 == 0) 收到一个错误(参数类型错误),有没有办法解决这个问题或解决这个问题?谢谢。

【问题讨论】:

  • 您想保留偶数索引的元素还是偶数值的元素?
  • 偶数索引处的元素

标签: java iterator


【解决方案1】:

if(value%2 == 0) 正在检查一个值是否为偶数,但您需要检查该值的 index 是否为偶数。有几种方法可以做到这一点,但一种方法是在循环中添加您自己的计数器。

private void createEvenListIterator() {
  
  LinkedList<String> list = new LinkedList<String>();
  int count = 0;
  while(iter.hasNext()) {
    String value = iter.next();
    if(count % 2 == 0) {
      list.add(value);
    }
    count++;
  }
  
  iter = list.iterator();
}

如果您能够切换到使用ListIterator,另一种方法是在iter.next() 之前调用nextIndex() 并直接获取索引。

【讨论】:

    猜你喜欢
    • 2016-11-07
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多