我怎样才能得到我的链表上的下一个对象?

how can I get the next object on my linkedlist?

我在 Java 中有 LinkedList 个对象,我想遍历它,当我在那里找到一个特定对象时 - 我想获取下一个对象(即就在第一个旁边)。

我认为这会解决这个问题:

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 处理的,但显然不是。

试试这个:

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;
}
}

您当前的代码失败,因为您甚至在开始迭代项目之前就调用了之前的代码。迭代是通过 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;
   }
}

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

您当然可以通过典型的 for 循环或增强的 for 循环来完成此操作,但我想说明一种自 JDK9 起称为 dropWhile 的新方法,它可以帮助您完成您的此要求:

假设您已经准备好 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