Variable used in lambda expression should be final or effectively final 的问题有什么好的写法 像这种吗

2019-10-09 17:42:05 +08:00
 rqxiao

    List<Map<String, Object>> maps = baseMapper.selectMaps(queryWrapper);
    BigDecimal totalRecharge=new BigDecimal(0);
    maps.stream().findFirst().ifPresent(
            map->{
                 totalRecharge = (BigDecimal) map.get("totalRecharge");
            }

    );
    
    
    List<Map<String, Object>> maps = baseMapper.selectMaps(queryWrapper);
    final BigDecimal[] totalRecharge = {new BigDecimal(0)};
    maps.stream().findFirst().ifPresent(
            map->{
                 totalRecharge[0] = (BigDecimal) map.get("totalRecharge");
            }

    );
2722 次点击
所在节点    程序员
4 条回复
entertainyou
2019-10-09 17:47:11 +08:00
为啥不直接:

BigDecimal bigDecimal = maps.stream().findFirst().map(m -> (BigDecimal) m.get("totalRecharge")).orElse(0) ?
qwerthhusn
2019-10-09 18:02:14 +08:00
如果用的是 java 11 的话,可以这样玩
var xxxRef = new Object() { String xxx; };
xxxRef.xxx = "123";

而且这样的话,可以一次性将多个变量括进去。
如果 JDK10 之前,就用数组吧,但是感觉略奇怪。
rqxiao
2019-10-10 11:21:14 +08:00
@entertainyou 这样子 会有空指针
rqxiao
2019-10-10 11:31:28 +08:00
@rqxiao 额 好像 findFirst()就会出现空指针

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/607532

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX