лямбда получить целое число с карты - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь получить число после выполнения вычислений с использованием лямбда-выражения, но получаю ошибку.

Я использую лямбда-выражение:

int num = Optional.ofNullable(list.stream().filter(x->x.getType().getTypeId()==Type.getTypeId()).limit(1).map(x->x.getNum())).get();

После фильтрации я хочуполучить первое найденное значениеНо я получаю сообщение об ошибке:

cannot convert from Stream<Integer> to int

Итак, в настоящее время я использую

Optional<> li = list.stream().filter(x->x.getType().getTypeId()==Type.getTypeId()).findFirst();
if (li.isPresent()) {
    num = li.map(x-> x.getNum()).get();
}

Но я смотрел, можно ли сделать вышеупомянутое в одной строке, ачем дополнительный if оператор

Раньше я пробовал get() с findFirst(), но он давал nullpointerException.Как я могу безопасно получить значение.

1 Ответ

0 голосов
/ 23 сентября 2018

list.stream().filter(x->x.getType().getTypeId()==Type.getTypeId()).limit(1).map(x->x.getNum()) возвращает Stream.Вам не хватает терминальной операции findFirst:

int num = 
    list.stream()
        .filter(x->x.getType().getTypeId()==Type.getTypeId())
        .map(x->x.getNum())
        .findFirst()
        .orElse(0); // default value in case the Stream is empty after the filtering
...