Lambda 表达式的5种不同语法

原文:https://www.programcreek.com/2014/01/5-different-syntax-of-lambda-expression/

1、标准语法

思考下面这个例子:

String[] arr = {"program", "creek", "is", "a", "java", "site"};
Arrays.sort(arr, (String m, String n) -> Integer.compare(m.length(), n.length()));
System.out.println(Arrays.toString(arr));

一个lambda表达式的标准语法由以下几部分组成:
1. 由逗号分隔的参数列表在圆括号内。在这个例子中,它是(String m, String n)
2. 箭头标记->
3. 主体由一个单独的表达式或一个语句块。在这个例子中,它是一个单独的表达式Integer.compare(m.length(), n.length())

Output:
[a, is, java, site, creek, program]

2、参数类型能够被推断

如果一个参数的参数类型能够从上下文中被推断出来,则这个参数类型将被忽略。
在前面的代码中,参数m和n的类型能够被推断为字符串,所以这参数类型能够被忽略。这使代码更干净并且更像一个真实的lambda表达式。

String[] arr = { "program", "creek", "is", "a", "java", "site" };
Arrays.sort(arr, (m, n) -> Integer.compare(m.length(), n.length()));
System.out.println(Arrays.toString(arr));

3、多行代码在lambda表达式中

如果代码不能被写在一行中,它能够被放在{}中。在这种情况下代码应该明确包含一个return语句。

String[] arr = { "program", "creek", "is", "a", "java", "site" };
Arrays.sort(arr, (String m, String n) -> {
    if (m.length() > n.length())
        return -1;
    else
        return 0;
});
System.out.println(Arrays.toString(arr));
Output:
[program, creek, java, site, is, a]

4、单个能够被推断类型的参数

当参数类型能够被推断的情况下,单个参数的的lambda表达式可以省略圆括号。

String[] arr = { "program", "creek", "is", "a", "java", "site" };
Stream<String> stream = Stream.of(arr);
stream.forEach(x -> System.out.println(x));
Output:
a
is
java
site
creek
program

5、无参数

当一个函数没有参数时,我们也能写成lambda表达式。关于例子,它能够看起来像下面这样:

() -> {for(int I=0; I<10; I++) doSomething();}

6、方法引用

4中的代码利用方法引用也能写成下面的样子:

Stream<String> stream = Stream.of(arr);
stream.forEach(System.out::println);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值