我正在尝试使用Lambda表达式进行计算后获得数字,但出现错误。
我正在使用的lambda表达式:
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
。如何安全地获取值。
答案 0 :(得分:5)
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