как я могу получить следующий объект в моем списке ссылок? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть 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 голосов
/ 17 декабря 2018

Ваш текущий код не работает, потому что вы вызываете предыдущий, даже не начав итерации по элементам.Итерация выполняется с помощью listIterator.next(); call.Вы можете попробовать код ниже.

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;
   }
}
0 голосов
/ 17 декабря 2018

Во-первых, я бы предложил использовать ArrayList вместо LinkedList, так как первое почти всегда является лучшим вариантом для использования. см. Этот пост для получения дополнительной информации.

Вы можете определенно сделать это с помощью обычного цикла 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
0 голосов
/ 17 декабря 2018

Попробуйте это:

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;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...