Java 8 Stream для поиска элемента в списке

У меня есть следующий класс:

public class Item {
    int id;
    String name;
    // few other fields, contructor, getters and setters
}

У меня есть список предметов. Я хочу перебрать список и найти экземпляр, который имеет определенный идентификатор. Я пытаюсь сделать это через потоки.

public void foobar() {

    List<Item> items = getItemList();
    List<Integer> ids = getIdsToLookup();
    int id, i = ids.size() - 1;

    while (i >= 0) {
        id = ids.get(i);
        Optional<Item> item = items
            .stream()
            .filter(a -> a.getId() == id)
            .findFirst();
        // do stuff
        i--;
    }
}

Это лучший способ перебрать список и получить нужный мне элемент? Кроме того, я получаю сообщение об ошибке в строке фильтра для идентификатора, в котором говорится, что переменные, используемые в лямбда-выражениях, должны быть окончательными или эффективно окончательными. Может быть, я могу определить идентификатор внутри цикла while, это должно избавить от исключения. Благодаря.

9
задан Tagir Valeev 11 March 2016 в 01:27
поделиться