01:Lambda表达式

Lambda表达式标准格式:

  • 由三部分组成:
    a.一些参数
    b.一个箭头
    c.一段代码

  • 格式:
    (参数列表) ->{ 一些重写方法的代码};

  • 解释说明格式:
    ():接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数使用逗号分隔,
    ->:传递的意思,把参数传递给方法体{}
    {}:重写接口的抽象方法的方法体

package com.Lambda;/*Lambda表达式标准格式:由三部分组成:a.一些参数b.一个箭头c.一段代码格式:(参数列表) ->{ 一些重写方法的代码};解释说明格式:():接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数使用逗号分隔->:传递的意思,把参数传递给方法体{}{}:重写接口的抽象方法的方法体*/
public class Demo02Lambda {public static void main(String[] args) {//使用匿名内部类的方式实现多线程new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "新线程创建了");}}).start();//使用Lambda表达式,实现多线程new Thread(() ->{System.out.println(Thread.currentThread().getName() + "新线程创建了");}).start();}
}

02:Lambda表达式无参数无返回值案例

需求

  • 给定一个厨子Cook接口,内含唯一的抽象方法makeFood,且无参数、无返回值。

  • 使用Lambda的标准格式调用invokeCook方法,打印输出"吃饭啦!"字样

package com.Lambda;
/*需求:给定一个厨子Cook接口,内含唯一的抽象方法makeFood,且无参数、无返回值。使用Lambda的标准格式调用invokeCook方法,打印输出"吃饭啦!"字样*/
public class Demo03Cook {public static void main(String[] args) {//调用invokeCoke方法,参数是Cook接口,传递Cook接口的匿名内部类对象invokeCoke(new Cook() {@Overridepublic void makeFood() {System.out.println("吃饭啦");}});//使用Lambda表达式,简化匿名内部类的书写invokeCoke(()->{System.out.println("吃饭啦");}); }//定义一个方法,参数传递Cook接口,方法内部调用Cook接口中的方法makeFoodpublic static void invokeCoke(Cook cook){cook.makeFood();}
}

Cook接口

package com.Lambda;/*定义一个Cook接口,内含唯一的抽象方法makeFood*/
public interface Cook {//定义无参数无返回值的方法makeFoodpublic abstract void makeFood();
}

03:Lambda表达式有参数有返回值案例

lambda表达式有参数有返回值的练习
需求

  • 使用数组存储多个Person对象

  • 对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序

package com.Lambda;import java.util.Arrays;
import java.util.Comparator;/*lambda表达式有参数有返回值的练习需求:使用数组存储多个Person对象对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序*/
public class Demo04Arrays {public static void main(String[] args) {//使用数组存储多个Person对象Person[] arr = {new Person("柳岩",39),new Person("杨幂",29),new Person("迪丽热巴",26)};//对数组中的Person对象使用Arrays对象使用Arrays的sort方法通过年龄进行升序(前边-后边)排序
//        Arrays.sort(arr, new Comparator<Person>() {//            @Override
//            public int compare(Person o1, Person o2) {//                return o1.getAge()-o2.getAge();
//            }
//        });//使用Lambda表达式,简化匿名内部类Arrays.sort(arr,(Person o1,Person o2) ->{return o1.getAge()-o2.getAge(); } );//遍历数组for (Person p : arr) {System.out.println(p);}}
}

Person类

package com.Lambda;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public int getAge() {return age;}
}

04:Lambda表达式有参数有返回值案例(自定义接口)

Lambda表达式有参数有返回值的练习
需求

  • 给定一个计算器Calculator接口,内含抽象方法calc可以将两个int数字相加得到和值

  • 使用Lambda的标准格式调用invokeCalc方法,完成120和130的相加计算

package com.Lambda;/*Lambda表达式有参数有返回值的练习需求:给定一个计算器Calculator接口,内含抽象方法calc可以将两个int数字相加得到和值使用Lambda的标准格式调用invokeCalc方法,完成120和130的相加计算*/
public class Demo05Calculator {public static void main(String[] args) {//调用invokeCalc方法,方法的参数是一个接口,可以使用匿名内部类invokeCalc(120, 130, new Calculator() {@Overridepublic int calc(int a, int b) {return a+b;}});//使用Lambda表达式简化匿名内部类的书写invokeCalc(120,130,(int a,int b)->{return a+b;});}/*定义一个方法参数传递两个int类型的整数参数传递Calculator接口方法调用Calculator中的方法calc计算两个整数的和*/public static void invokeCalc(int a,int b,Calculator c){int sum = a + b;System.out.println(sum);}
}

计算器Calculator接口

package com.Lambda;/*给定一个计算器Calculator接口,内含抽象方法calc可以将两个int数字相加得到和值*/
public interface Calculator {//定义一个计算两个int整数和的方法并返回结果public abstract int calc(int a,int b);
}

05:Lambda表达式省略格式

Lambda表达式:是可推导,可以省略

  • 凡是根据上下文推导出来的内容,都可以省略书写

  • 可以省略的内容
    1.(参数列表):括号中参数列表的数据类型吗,可以省略不写
    2.(参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
    3.{一些代码}:如果{}中的代码只有一行,无论是否有返回值,都可以省略{},return,分号;)
    注意:要省略{},return,分号;必须一起省略

package com.Lambda;import com.sun.org.apache.bcel.internal.generic.ARRAYLENGTH;import java.util.ArrayList;/*Lambda表达式:是可推导,可以省略凡是根据上下文推导出来的内容,都可以省略书写可以省略的内容1.(参数列表):括号中参数列表的数据类型吗,可以省略不写2.(参数列表):括号中的参数如果只有一个,那么类型和()都可以省略3.{一些代码}:如果{}中的代码只有一行,无论是否有返回值,都可以省略{},return,分号;)注意:要省略{},return,分号;必须一起省略*/
public class Demo06ArrayList {public static void main(String[] args) {//在JDK1.7之前,创建集合对象必须把前后的泛型都写上ArrayList<String> list01 = new ArrayList<String>();//在JDK1.7版本之后,=号后边的泛型可以省略,后边的泛型可以根据前边的泛型推导出来ArrayList<String> list02 = new ArrayList<>();}
}
package com.Lambda;
public class Demo02Lambda {public static void main(String[] args) {//使用匿名内部类的方式实现多线程new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "新线程创建了");}}).start();//使用Lambda表达式,实现多线程new Thread(() ->{System.out.println(Thread.currentThread().getName() + "新线程创建了");}).start();//优化省略Lambdanew Thread(() -> System.out.println(Thread.currentThread().getName() + "新线程创建了")).start();}
}
package com.Lambda;public class Demo03Cook {public static void main(String[] args) {//调用invokeCoke方法,参数是Cook接口,传递Cook接口的匿名内部类对象invokeCoke(new Cook() {@Overridepublic void makeFood() {System.out.println("吃饭啦");}});//使用Lambda表达式,简化匿名内部类的书写invokeCoke(()->{System.out.println("吃饭啦");});//优化省略LambdainvokeCoke(()-> System.out.println("吃饭啦"));}//定义一个方法,参数传递Cook接口,方法内部调用Cook接口中的方法makeFoodpublic static void invokeCoke(Cook cook){cook.makeFood();}
}
package com.Lambda;import java.util.Arrays;
import java.util.Comparator;public class Demo04Arrays {public static void main(String[] args) {//使用数组存储多个Person对象Person[] arr = {new Person("柳岩",39),new Person("杨幂",29),new Person("迪丽热巴",26)};//对数组中的Person对象使用Arrays对象使用Arrays的sort方法通过年龄进行升序(前边-后边)排序
//        Arrays.sort(arr, new Comparator<Person>() {//            @Override
//            public int compare(Person o1, Person o2) {//                return o1.getAge()-o2.getAge();
//            }
//        });//使用Lambda表达式,简化匿名内部类Arrays.sort(arr,(Person o1,Person o2) ->{return o1.getAge()-o2.getAge(); } );//优化省略LambdaArrays.sort(arr,(o1, o2) ->o1.getAge()-o2.getAge());//遍历数组for (Person p : arr) {System.out.println(p);}}
}
package com.Lambda;public class Demo05Calculator {public static void main(String[] args) {//调用invokeCalc方法,方法的参数是一个接口,可以使用匿名内部类invokeCalc(120, 130, new Calculator() {@Overridepublic int calc(int a, int b) {return a+b;}});//使用Lambda表达式简化匿名内部类的书写invokeCalc(120,130,(int a,int b)->{return a+b;});//优化省略LambdainvokeCalc(120,130,(a,b)-> a+b);}/*定义一个方法参数传递两个int类型的整数参数传递Calculator接口方法调用Calculator中的方法calc计算两个整数的和*/public static void invokeCalc(int a,int b,Calculator c){int sum = a + b;System.out.println(sum);}
}

06:Lambda使用前提

Lambda表达式使用前提

  • 1.使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法
    无论是JDK内置的Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda
  • 2.使用Lambda必须具有上下文推断
    也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。
  • 备注:有且仅有一个抽象方法的接口.称为"函数式编程"

Lambda表达式详解相关推荐

  1. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  2. java lambda表达式详解_Java8新特性Lambda表达式详解

    课程目标: 通过本课程的学习,详细掌握Java8新特性之Lambda表达式: 适用人群:有Java基础的开发人员: 课程概述:从Java 8出现以来lambda是最重要的特性之一,它可以让我们用简洁流 ...

  3. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  4. java8 lambda 表达式详解

    lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法 使用 lambda 表达式时,会创建实现了函数式接口的一个匿名类实例 可以将 lambda ...

  5. jdk8新特性 lambda表达式详解

    本文主要讲到的内容有: 一- 前言 二- 背景 三- lambda表达式的语法 四- Lambda程序例子 4-1 Runnable Lambda 4-2 Comparator Lambda 4-3 ...

  6. Java 8 Lambda 表达式详解

    版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009186509 1. 引言 在 Java 8 以前,若我们想要把某些功能传递给某 ...

  7. C++中的Lambda表达式详解

    函数对象与Lambdas 你编写代码时,尤其是使用 STL 算法时,可能会使用函数指针和函数对象来解决问题和执行计算.函数指针和函数对象各有利弊.例如,函数指针具有最低的语法开销,但不保持范围内的状态 ...

  8. java函数式编程_Java 函数式编程和 lambda 表达式详解

    作者:DemonsI my.oschina.net/demons99/blog/2223079 为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要 ...

  9. Lambda表达式详解【一】

    以前在编程中很不喜欢用lambda表达式,但是又老是看别人在用,好吧,只能来看一下.找来几次,就这个博客还行 Lambda简介# Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内 ...

  10. 【Java Lambda表达式】Lambda表达式详解、Lambda表达式的等效使用方式、多线程

    1.静态内部类 静态内部类,属于类中的类,好处是:如果不使用,就不会被编译. 如果把这个类放到方法中,成为局部内部类(看下一部分) package cn.hanquan.test;/*Lambda表达 ...

最新文章

  1. 理解一致性哈希算法(consistent hashing)
  2. Jenkins cannot restart itself as currently configured
  3. php如何制定跳转到app原生页面,js实现界面向原生界面发消息并跳转功能
  4. c++中基类与派生类中隐含的this指针的分析
  5. x722网卡linux,Centos6.5 Intel X722 编译安装网卡驱动
  6. 创建MyFilter1类过滤器,对于未登陆用户(如果session对象中包含用户名就认为已登录)进行过滤跳转到登录页面
  7. android 设置图片资源,如何使用DataBinding将Image资源设置为ImageView
  8. 专家:金融科技发展需行业自律和监管合力推动
  9. docker︱在nvidia-docker中使用tensorflow-gpu/jupyter
  10. pt100专用芯片_T100/PT1000温度传感器芯片-PT100温度传感器芯片
  11. 写给父亲的语音计算器(‘(‘‘)‘括号优先级处理递归算法c#,一)
  12. 北京内推 | 秘塔科技招聘NLP算法工程师(社招校招可转正实习)
  13. NLP创业破局,如何摘取更高处的果实
  14. 蓝牙模块惨痛教训——模块与单片机串口的隔离(更新)
  15. C/C++笔记之播放音乐的函数
  16. 我才22岁,我再玩一年又能怎么样?等我23岁的时候,一定给你活出个人样
  17. OSChina 周五乱弹 —— 又到周五,我想静静
  18. 【Linux入门学习教程】
  19. Win10系统提示未安装音频设备的解决教程
  20. 烟台市莱山区计算机电脑培训班,烟台邦文电脑培训班|AB软件简介

热门文章

  1. matlab 谐波电压含有量,电流平均值谐波检测方法MATLAB仿真
  2. [遗传算法]冰与火之歌
  3. 数据集成工具 —— datax与flinkx的使用
  4. 压缩感知的尽头: 原子范数最小化
  5. 【RPC】分布式一致性与一致性协议
  6. 抹掉iPhone会有怎样后果 他人还能用吗
  7. 企业在产品同质化的今天如何提高竞争力
  8. Qt的主窗口背景设置
  9. python绘制饼图的如何设置高度宽度_python 用 matplotlib 饼图参数详解 plt.pie()
  10. Python+tkinter库实现简单图书管理系统