java8--lambda

举报
brucexiaogui 发表于 2021/12/30 00:56:00 2021/12/30
【摘要】 java8--lambda 一、lambda概述 1、函数式接口:接口中只有一个需要被实现的抽象函数 2、函数式接口注解:@FunctionalInterface 表示这个接口是一个函数式接口。为了避免后来的人在接口中增加新的接口函数,导致其有多个接口函数需要被实现,变成非函数式接口。 3、lambda表达式本质是匿名...

java8--lambda

一、lambda概述

1、函数式接口:接口中只有一个需要被实现的抽象函数

2、函数式接口注解:@FunctionalInterface 表示这个接口是一个函数式接口。为了避免后来的人在接口中增加新的接口函数,导致其有多个接口函数需要被实现,变成非函数式接口。

3、lambda表达式本质是匿名方法

4、Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)

二、lambda表达式语法

2.1、lambda表达式结构

Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 “ ->”,该操作符被称为 Lambda 操作符或

箭头操作符。

它将 Lambda 分为两个部分:

左侧: 指定了 Lambda 表达式需要的方法参数列表

右侧: 指定了 Lambda 体,即 Lambda 表达式要执行的功能。

2.2、lambda表达式使用说明

(1)一个 Lambda 表达式可以有零个或多个参数,参数的类型既可以明确声明,也可以根据上下文来推断

(2)圆括号内,方法参数列表之间用逗号相隔

(3)当只有一个参数,且其类型可推导时,圆括号()可省略

(4)Lambda 表达式的主体可包含零条或多条语句,如果 Lambda 表达式的主体只有一条语句,花括号{}可省略,如果有返回值,return也可以省略。匿名函数的返回类型与该主体表达式一致

(5)如果 Lambda 表达式的主体包含一条以上语句,则表达式必须包含在花括号{}中(形成代码块)。匿名函数的返回类型与

代码块的返回类型一致,若没有返回则为空

三、lambda表达式使用实例


  
  1. import org.junit.Test;
  2. import org.omg.CORBA.CODESET_INCOMPATIBLE;
  3. import java.io.InputStream;
  4. import java.lang.annotation.Annotation;
  5. import java.util.Comparator;
  6. import java.util.function.Consumer;
  7. import java.util.function.Function;
  8. import java.util.function.Supplier;
  9. public class Demo1{
  10. @Test
  11. public void testConsumer(){
  12. // 原始写法
  13. Consumer<String> consumer = new Consumer<String>() {
  14. @Override
  15. public void accept(String s) {
  16. System.out.println(s);
  17. }
  18. };
  19. // lambda第一种写法
  20. Consumer<String> consumer1 = s -> System.out.println(s);
  21. // lambda第二种写法
  22. Consumer<String> consumer2 = System.out::println;
  23. // 调用lambda函数式编程的方法
  24. consumer2.accept("helle");
  25. }
  26. @Test
  27. public void test2(){
  28. // 原始写法
  29. Supplier<String> supplier = new Supplier<String>() {
  30. @Override
  31. public String get() {
  32. return "Hello";
  33. }
  34. };
  35. // lambda写法
  36. Supplier<String> supplier1 = ()->"hello";
  37. // 调用lambda函数式编程的方法
  38. supplier1.get();
  39. }
  40. @Test
  41. public void test3() {
  42. // 原始写法
  43. Function<String, Integer> func = new Function<String, Integer>() {
  44. @Override
  45. public Integer apply(String s) {
  46. return s.length();
  47. }
  48. };
  49. // 第一种lambda写法
  50. Function<String,Integer> func2 = s -> s.length();
  51. // 第二种lambda写法
  52. Function<String,Integer> fun3 = String::length;
  53. }
  54. @Test
  55. public void test4(){
  56. // 原始写法
  57. Comparator<Integer> comparator = new Comparator<Integer>() {
  58. @Override
  59. public int compare(Integer o1, Integer o2) {
  60. return Integer.compare(o1,o2);
  61. }
  62. };
  63. // lambda第一种写法
  64. Comparator<Integer> comparator1 = (o1,o2)-> Integer.compare(o1,o2);
  65. // lambda第二种写法
  66. Comparator<Integer> comparator2 = Integer::compare;
  67. }
  68. @Test
  69. public void test5(){
  70. // 原始写法
  71. Comparator<String> comparator = new Comparator<String>() {
  72. @Override
  73. public int compare(String o1, String o2) {
  74. return o1.length()>o2.length() ? 1:-1;
  75. }
  76. };
  77. // lambda写法
  78. Comparator<String> comparator1 = (str1,str2)-> str1.length()>str2.length()?1:-1;
  79. }

 

 

 

 

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/96874860

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。