在主体中忽略参数时编写lambda表达式

时间:2016-06-02 16:49:43

标签: java lambda java-8

如果lambda表达式不需要参数,因此它的名称是否过多,我如何编写它?

这种方式无法编译:

>>> liste_groupe=(('image1', 'image2', 'image6'),('image5', 'image4', 'image8', 'image7', 'image3', 'image9'))
>>> l = [item for t in liste_groupe for item in t]
>>> len(l)
9

# Or use itertools.chain
>>> import itertools
>>> l = list(itertools.chain(*liste_groupe))
>>> len(l)
9

但是这个确实:

>>> count = sum([len(t) for t in liste_groupe])
>>> count
9

有更好的方法吗?

1 个答案:

答案 0 :(得分:29)

既然你已经提到过这个有用了

setRowFactory(__ -> new TableRowCustom());

我假设预期的功能接口方法必须接受单个参数。 The identifier _ is a reserved keyword since Java 8.

我只会使用一次性(有效标识符)字符。

setRowFactory(i -> new TableRowCustom());
setRowFactory($ -> new TableRowCustom()); // allowed, but avoid this

甚至

setRowFactory(ignored -> new TableRowCustom());

要明确。

Java Language Specification定义了lambda表达式的语法

LambdaExpression:
  LambdaParameters -> LambdaBody 

LambdaParameters:
  Identifier
  ( [FormalParameterList] )
  ( InferredFormalParameterList )
InferredFormalParameterList:
  Identifier {, Identifier}

换句话说,您不能省略标识符。

正如Holger所示,如果他们决定使用_作为未使用的参数名称,则可以很容易地从源代码中的__更改为_码。你现在可能只想坚持下去。