Вы можете попробовать что-то вроде этого:
Optional<String> optValue =
dataFile.getDatas()
.stream()
.filter(t -> t.getType().equals("specType"))
.flatMap(t -> t.getValues().stream()
.filter(v -> v.getId() == 2)
.map(DataValue::getDataValue)
)
.findFirst();
Stream.findFirst()
позволяет завершить обработку, как только один ее элемент соответствует условиям.Аналогично тому, что вы делали в своем действительном коде.
Обратите внимание, что Stream.findFirst()
возвращает Optional
.Либо разверните объект после операции терминала, например:
String value = optValue.orElse("default value");
, либо сделайте в этом потоке саму:
String value =
...
.findFirst();
.orElse("defaultValue")