Итерируйте список, начиная с заданного индекса по кругу, используя java 8 IntStream и получайте индекс первого элемента, соответствующего условию - PullRequest
0 голосов
/ 24 октября 2018

Постановка задачи: список объектов, которые необходимо циклически повторять, начиная с заданного индекса и повторяя до тех пор, пока мы не достигнем того же индекса.Условие должно быть оценено, и должен быть возвращен индекс первого элемента, соответствующего условию.

Таким образом, это ведет себя как следующая кнопка к элементу, который удовлетворяет условию

Класс

public class Code {
private String type;
private String description;
private boolean option;
public String getType() {
    return type;
}
public void setType(String type) {
    this.type = type;
}
public String getDescription() {
    return description;
}
public void setDescription(String description) {
    this.description = description;
}
public boolean isOption() {
    return option;
}
public void setOption(boolean option) {
    this.option = option;
}
@Override
public String toString() {
    return "Code [type=" + type + ", description=" + description + ", option=" + option + "]";
}

}

Существует список (именованный список) с объектами класса Code и индексом, с которого нужно начинать (именованный ind) - этот индекс постоянно меняется.

Это может быть реализовано с помощью цикла for, как показано ниже

for(int i=((ind+1)%list.size());i!=ind;i=((i+1)%list.size())) {
        Code code = (Code)list.get(i);
        if(!code.isOption())
        {
            System.out.println("Index of the record matched" + i);
            break;
        }
    }

Я хотел реализовать вышеизложенное с помощью Java 8 IntStream.Пожалуйста, дайте мне знать, как этого можно достичь.

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете создать и объединить два int-потока, один из которых начинается с startIndex, а другой - с startIndex.

    int result = IntStream
                 .concat( 
                         IntStream.range( startIndex, list.size() ), 
                         IntStream.range(0, startIndex) )
                 .filter( i -> list.get(i).isOption() )
                 .findFirst()
                 .orElse(-1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...