lambda从地图检索整数

时间:2018-09-23 09:42:59

标签: java dictionary lambda java-8

我正在尝试使用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。如何安全地获取值。

1 个答案:

答案 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