Java8 lambda ArrayList final

问个问题,现在用Java8的lambda表达式,然后表达式中使用了一个外面传入的ArrayList,然后这个ArrayList需要是final,这是lambda的规定,就导致上面处理了ArrayList之后要给另外一个变量。谁有什么方法避免这种写法。感觉这么写很蠢。
图片描述

阅读 2.4k
2 个回答

lambda表达式最早在java8中引入,有不完善的地方是正常的,lambda表达式用到的外边的变量必须是不可变的,这是函数式编程的一个原则,但实际上js等并不遵循这个原则,所以在js里会很方便,但在java8比较遵守这个原则,当然会麻烦点。

可以通过以下的方式避免 safForecastActPredictHis 多次赋值:

List<SafForecastActPredictHis> safForecastActPredictHis = lastPredicIncomeVersion
            .map(str -> new ArrayList<SafForecastActPredictHis>())
            .orElse(new ArrayList<>());
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题