Java Lambda 语法清晰

问题描述 投票:0回答:1

根据我的理解,这是Java中的一条语句:

while((x % p == 0l) && (x > p)) x /= p;

如果是这样,为什么这是语法错误:

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();
java lambda syntax
1个回答
0
投票

p->something
希望
something
是表达,而不是陈述。

p->{something}
希望
something
是陈述,或者更准确地说,是陈述列表。

参见:15.27。 Lambda 表达式

具体为 15.27.2。 Lambda 身体

LambdaBody:
   Expression
   Block 
© www.soinside.com 2019 - 2024. All rights reserved.