JDK8系列之Lambda表达式教程和示例
【摘要】 JDK8系列之Lambda表达式教程和示例
1、Lambada 表达式简介
Lambda 表达式是一种匿名函数,但对Java中的Lambda表达式而已并不完全正确,简单来说,Lambda表达式是一种没有声明的方法,也即没有访问修饰符、返回值声明和名字
与面向对象编程(OOP)相比,面向对象编程侧重于围绕对象发展,而函数式编程语言的侧重点在于函数,lambada表达...
JDK8系列之Lambda表达式教程和示例
1、Lambada 表达式简介
Lambda 表达式是一种匿名函数,但对Java中的Lambda表达式而已并不完全正确,简单来说,Lambda表达式是一种没有声明的方法,也即没有访问修饰符、返回值声明和名字
与面向对象编程(OOP)相比,面向对象编程侧重于围绕对象发展,而函数式编程语言的侧重点在于函数,lambada表达式为java函数式编码提供了保障。
使用 Lambda 表达式可以使代码变的更加简洁紧凑
2、Lambada表达式语法
表达式语法使用语法:(argument) -> (body)
(arg1, arg2...) -> { body }
(Type arg1, Type arg2...) -> { body }
- 1
- 2
引用https://www.runoob.com/java/java8-lambda-expressions.html例子:
// 1. 不需要参数,返回值为 5
() -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y // 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 一个 Lambda 表达式可以有零个,一个或多个参数
- Lambda 表达式的主体可以包含零个、一个或多个语句。
- 参数的类型可以显式声明,也可以从上下文中推断出来。
- 多个参数用强制括号括起来并用逗号分隔。空括号用于表示一组空参数
- 只有一个参数时可以省略括号,主体只有一个表达式时可以省略大括号
3、典型Lambada表达式例子
- 无参方式
// example 1 :Runnable 任务,无参方式
Runnable r = () -> System.out.println(Thread.currentThread().getName());
Thread t = new Thread(r);
t.start();
- 1
- 2
- 3
- 4
- 单个参数例子
// example 2:: Comparator 比较器,单个参数例子
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(3);
list.add(2);
// 使用comparingInt加上lambada表达式,升序排序
list.sort(Comparator.comparingInt(a -> a));
// 变量打印参数
list.forEach(v -> {System.out.println(v);});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 多个参数例子
// example 3: 集合的操作,多个参数例子
Map<String, Integer> items = new HashMap<>(8);
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60);
items.forEach((k , v) -> {System.out.println(String.format("key : %s , value : %s" , k , v));});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 与函数接口的应用
public static void main(String[] args) { // example 4 : 函数接口应用,拓展知识 // Consumer接口接收一个参数,不返回参数 consumerFun(1 , v -> {System.out.println(v);}); // binConsumer 接收两个参数,返回0个参数 binConsumerFun("hello", "world" , (a ,b) -> { System.out.println(a + b); }); // Predicate 接收一个参数,返回一个boolean值 System.out.println(predicateFun(3 , a -> a ==3)); // Predicate 接收0个参数,返回一个值 System.out.println(supplierFun(() -> 1));
}
public static void consumerFun(int value, Consumer<Integer> c) { c.accept(value);
}
public static void binConsumerFun(String a , String b, BiConsumer<String , String> binc) { binc.accept(a , b);
}
public static boolean predicateFun(int value, Predicate<Integer> pre) { return pre.test(value);
}
public static int supplierFun(Supplier<Integer> supplier) { return supplier.get(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
附录:参考资料
- https://howtodoinjava.com/java8/lambda-expressions/
- https://www.runoob.com/java/java8-lambda-expressions.html
- https://beginnersbook.com/2017/10/java-lambda-expressions-tutorial-with-examples/
文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。
原文链接:smilenicky.blog.csdn.net/article/details/115720089
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)