怎么把以下代码用lambda表达式做修改

Sandm_ 2018-11-15 05:05:45
public List<String> add(){
List<BigDecimal> decimals = Stream.of(new BigDecimal("1"),null,new BigDecimal("2")).collect(Collectors.toList());
List<String> lists = new LinkedList<>();
BigDecimal total = new BigDecimal("0.0");
for (BigDecimal tem : decimals){
if(null != tem){
total = total.add(tem);
lists.add(total.toPlainString());
}else {
lists.add("");
}
}
return lists;
}
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
binbinxyz 2018-11-19
  • 打赏
  • 举报
回复
参考楼上 @Nihility/ 方法把用于累加的变量total声明为类变量或者声明一个List用于临时存储累加值,代码如下:

		final List<BigDecimal> temp = new ArrayList<BigDecimal>() {
			{
				add(new BigDecimal("0.0"));
			}
		};
		decimals.forEach(tem -> {
			if (null != tem) {
				temp.set(0, temp.get(0).add(tem));
				lists.add(temp.get(0).toPlainString());
			} else {
				lists.add("");
			}
		});
循环结束或退出方法时该变量也随即销毁。
Nihility/ 2018-11-19
  • 打赏
  • 举报
回复
引用 2 楼 u010056105 的回复:
[quote=引用 1 楼 qq724581322 的回复:]

List<BigDecimal> decimals = Stream.of(new BigDecimal("1"), null, new BigDecimal("2")).collect(Collectors.toList());
List<String> lists = new LinkedList<>();
BigDecimal total = new BigDecimal("0.0");
decimals.forEach(tem -> {
	if (null != tem) {
		lists.add(total.add(tem).toPlainString());
	} else {
		lists.add("");
	}
});
return lists;
total是要累加的 这才是重点 我原本只是不想循环判断上一次的值是否为“”,所以才用total记录之前累加的结果,这里不好改的原因就是total不是final的 在lambda表达式里是不允许使用的[/quote] 你可以把BigDecimal total = new BigDecimal("0.0");声明为类变量(就是移到方法外边去),在循环结束的时候再把值归零。 给你看main方法的示例

    static BigDecimal total = new BigDecimal("0.0");
	public static void main(String[] args) {
		List<BigDecimal> decimals = Stream.of(new BigDecimal("1"), null, new BigDecimal("2")).collect(Collectors.toList());
		List<String> lists = new LinkedList<>();
		decimals.forEach(tem -> {
			if (null != tem) {
				total = total.add(tem);
				lists.add(total.toPlainString());
			} else {
				lists.add("");
			}
		});
		System.out.println(total); //3.0
	}
Sandm_ 2018-11-19
  • 打赏
  • 举报
回复
引用 1 楼 qq724581322 的回复:

List<BigDecimal> decimals = Stream.of(new BigDecimal("1"), null, new BigDecimal("2")).collect(Collectors.toList());
List<String> lists = new LinkedList<>();
BigDecimal total = new BigDecimal("0.0");
decimals.forEach(tem -> {
	if (null != tem) {
		lists.add(total.add(tem).toPlainString());
	} else {
		lists.add("");
	}
});
return lists;
total是要累加的 这才是重点 我原本只是不想循环判断上一次的值是否为“”,所以才用total记录之前累加的结果,这里不好改的原因就是total不是final的 在lambda表达式里是不允许使用的
Nihility/ 2018-11-16
  • 打赏
  • 举报
回复

List<BigDecimal> decimals = Stream.of(new BigDecimal("1"), null, new BigDecimal("2")).collect(Collectors.toList());
List<String> lists = new LinkedList<>();
BigDecimal total = new BigDecimal("0.0");
decimals.forEach(tem -> {
	if (null != tem) {
		lists.add(total.add(tem).toPlainString());
	} else {
		lists.add("");
	}
});
return lists;

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧