Java Lambda 语法问题

像这样写这里会报错

final AtomicLong subtotal = new AtomicLong(limit);

final long maxPrimeFactor = primeStream.takeWhile(p -> p * p <= limit)
                                       .filter(p -> subtotal.get() % p == 0)
                                       .peek(p -> while((subtotal.get() % p == 0) && (subtotal.get() > p)) subtotal.set(subtotal.get() / p)) // Syntax error here.
                                       .dropWhile(p -> p != subtotal.get())
                                       .findFirst()
                                       .getAsLong();

如果换成这样就没问题

final AtomicLong subtotal = new AtomicLong(limit);

final long maxPrimeFactor = primeStream.takeWhile(p -> p * p <= limit)
                                       .filter(p -> subtotal.get() % p == 0)
                                       .peek(p -> { while((subtotal.get() % p == 0) && (subtotal.get() > p)) subtotal.set(subtotal.get() / p)); } // No syntax error here.
                                       .dropWhile(p -> p != subtotal.get())
                                       .findFirst()
                                       .getAsLong();

p->xx 这里xx是表达,而不是陈述。

p->{xx}这里xx是语句,或者准确地说,是语句块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值