2014-10-14 2 views
0

Очень примитивный вопрос, но у меня есть петля, например.Следующий элемент, использующий для циклов java

List<ObjectList> = //set of values inside. 

for(Object data : ObjectList){ 

// how to access next element? 
// current element is accesed by 'data'. I could get the index position and then increment but is there a easier way? 

} 

Как вы бы получили следующий элемент/предыдущий? Я знаю, что есть итераторы, которые я могу использовать, и так далее, но я хочу знать аккуратный способ сделать это в цикле for.

+0

сделать деталь (ObjectList) contextaware и сделать такие функции, как previoius, следующий и т.д. – lordkain

ответ

0

Сделайте два метода для следующего и проницаемого и передайте список и элемент.

public static <T> T nextElement(List<T> list,T element){ 
    int nextIndex=list.indexOf(element)+1; 
    return list.size()<nextIndexlist?null:list.get(nextIndex); 

} 

public static <T> T previousElement(List<T> list,T element){ 
    int previousIndex=list.indexOf(element)-1; 
    return list.size()>previousIndexlist?null:list.get(previousIndex); 

} 

1) Первый способ

for(ObjectList data : objectList){ 
    ObjectList previousElement=previousElement(objectList,data); 
    ObjectList nextElement=nextElement(objectList,data); 
} 

2) Второй способ

for(int i=0;i<=objectList.size();i++){ 

     ObjectList previousElement=objectList.size>i-1?null:objectList.get(i-1); 
     ObjectList nextElement=objectList.size<i+1?null:objectList.get(i+1); 

    } 

3) Третий способ с использованием итератора

2

Вы можете, но не делать этого, поскольку временная сложность цикла будет
увеличение. Просто используйте обычный цикл с переменной цикла int i.

Если вы все еще хотите сделать это вы можете найти индекс так:

int index = lst.indexOf(data);
Тогда index+1 является индексом следующего элемента.
И index-1 - это индекс предыдущего элемента.

+0

Почему - * не делать *? – TheLostMind

+0

@TheLostMind вопрос изменился ... им нужно предыдущее значение и следующее значение. – StackFlowed

+0

Такая же логика будет применяться независимо. Я знаю, что это возможно через indexof, как указано, но хотел знать, есть ли более аккуратный способ сделать это. Угадайте, нет ли: s –

0

Собственно, ваш for-each не повторяет List. Это,

List<ObjectList> = //set of values inside. 
for(Object data : ObjectList){ 
} 

должен выглядеть примерно так,

List<ObjectList> al = new ArrayList<>(); 
for(ObjectList data : al){ // <-- like so. 
} 

Но это не будет найти какие-либо данные, пока вы не заселить List.

0

Использование «нормальный» для цикла, это может быть, что вы ищете:

List<Object> objectList = new ArrayList<>(); 

// add some data 

for (int i = 0; i < objectList.size(); i++) { 
    System.out.println((i > 0) ? "previous Object: " + objectList.get(i - 1) : "No previous object, current is the first one."); 

    System.out.println("Current Object: " + objectList.get(i)); 

    System.out.println((i < objectList.size()) ? "Next Object: " + objectList.get(i + 1) : "No next object, current is the last one.");   
} 

Ключевой аспект в том, что вы должны использовать переменную цикла (i в данном случае) для доступа ваши фактические элементы. i + 1 дает следующий элемент и i - 1 предыдущий.

0

Я думаю, что вы это итератор, его использовали, как это:

List<ObjectList> list= //set of values inside. 
Iterator<ObjectList> iterator = list.iterator(); 
    while (iterator.hasNext()) { 
     System.out.println(iterator.next()); 
     System.out.println(iterator.previous()); 
     iterator.next() 
    } 

Это позволяет получить доступ к следующим и предыдущим объектам.

0

ListIterator:

Существует ListIterator, который может немного отступить назад и вперед.

Разум в коде ниже previousIndex() дает -1 в начале.

for (ListIterator<Object> iter = objectList.listIterator(); iter.hasNext();) { 
    Object object = iter.next(); 
    Object previous = objectList.get(iter.previousIndex()); // Might fail 
    Object next = objectList.get(iter.nextIndex());   // Might fail 
    if (iter.hasPrevious()) ... iter.previous(); 
} 
Смежные вопросы