【问题标题】:lambda retrieve integer from maplambda 从地图中检索整数
【发布时间】:2018-09-23 09:42:58
【问题描述】:

我在使用 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。如何安全地检索该值。

【问题讨论】:

    标签: java dictionary lambda java-8


    【解决方案1】:

    list.stream().filter(x-&gt;x.getType().getTypeId()==Type.getTypeId()).limit(1).map(x-&gt;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
    

    【讨论】:

    • 感谢您的回复。我得到了我所缺少的。它看起来也是 NPE 安全的。
    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多