如何获得我的链表中的下一个对象?

时间:2018-12-17 19:02:57

标签: java linked-list listiterator

我在LinkedList中有一个Java个对象,我想对其进行遍历,当我在其中找到一个特定对象时-我要取下一个对象(紧接在下一个对象)到第一个)。

我认为这可以解决问题:

listIterator = items.listIterator();
while (listIterator.hasNext() && listIterator.previous().getCode().equals(search.getCurrentCode())) {

    item = listIterator.next();
    result.setCurrentCode(item.getCode());
    break;
}

但是我遇到错误:

java.util.NoSuchElementException: null

我认为是因为使用了.previous,但是我不知道如何正确处理,那我该如何解决?我正在使用previous,但是我想使用的是当前元素-我认为这是由.previous处理的,但显然不是。

3 个答案:

答案 0 :(得分:3)

您当前的代码失败,因为您正在调用之前的代码,甚至没有开始对项目进行迭代。迭代是通过listIterator.next();调用完成的。 您可以尝试下面的代码。

while (listIterator.hasNext()){
   // iterate always
   item = listIterator.next();
   // if found and an element still exist
   if(item.getCode().equals(search.getCurrentCode() && listIterator.hasNext()){
      // get the next element
      item = listIterator.next();
      result.setCurrentCode(item.getCode());
      break;
   }
}

答案 1 :(得分:0)

尝试一下:

listIterator = items.listIterator();
// listIterator.previous() does not exist in first iteration
while (listIterator.hasNext()) {
// you can compare previous value if it exist
if(listIterator.hasPrevious() && listIterator.previous().getCode().equals(search.getCurrentCode())){
    item = listIterator.next();
    result.setCurrentCode(item.getCode());
    break;
}
}

答案 2 :(得分:0)

首先,我建议使用ArrayList而不是LinkedList,因为前者几乎总是更好的选择。 see this post以获得更多信息。

您绝对可以通过典型的for循环或增强的for循环来执行此操作,但是我想说明一种自dropWhile开始的JDK9新方法,它可以帮助您满足您的以下要求:

假设您已安装ArrayList。您可以简单地做到:

myList.stream()
      .dropWhile(c -> !c.getCode().equals(search.getCurrentCode()))
      .skip(1) // get the object to the right of the matched item
      .findFirst() // retrieve this object
      .ifPresent(s -> result.setCurrentCode(s.getCode())); // apply the logic based on the found object