Использование расширенного цикла for для поиска в LinkedList - PullRequest
0 голосов
/ 11 ноября 2019

Так что я пытаюсь заменить цикл for на расширенный цикл for, и я не могу заставить его работать, проблема в том, что он выполняет поиск, и когда он находит имя, которое ищет, он возвращает нэс -1. С нормальным для цикла он возвращает правильный индекс. n - строка, переданная методу, массив - связанный список

boolean found= false;
    for(O o: array) {
        if(o.getString().equals(n)) {
            System.out.println("\n"+n+ " is found at position " +array.indexOf(name)+"\n");
            found = true;
        }
    }

    for (int i = 0; i<array.size();i++) {
        if((array.get(i).getString()).equals(n)) {
            System.out.println("\n"+n+ " is found at position " +i+"\n");
            found = true;
        }
    }

Ответы [ 2 ]

2 голосов
/ 11 ноября 2019

Вы должны использовать array.indexOf (o)

1 голос
/ 11 ноября 2019

Индекс немного косвенный, так как indexOf нужен весь объект O;Optional<O> проще. array.indexOf(n) должно было быть array.indexOf(o).

Optional<O> foundO = array.stream().findAny(o-> n.equals(o.getString()));
int index = foundO.mapToInt(o -> array.indexOf(o)).orElse(-1);

System.out.println("\n"+n+ " is found at position " +index+"\n");

Как вы видите, более новый Stream API устраняет необходимость в некотором цикле for / forEach.

...