Lambda -语法使用,代码简化
使用Lambda的方式实现线程
- 线程中()是run方法的(),可用来接受参数,格式:
new Thread(()->{
System.out.println(Thread.currentThread().getName() + "执行");
},"Lambda线程创建").start();
Lambda标准格式:
- 一些参数
():接口中抽象方法的参数列表,无,就空着
- 一个箭头
->:把参数传递给代码块{}
- 一段代码块
{}:重写接口的抽象方法的方法体
Lambda表达式,是可推导,是可省略的
- 凡是可以根据上下文推导出来的内容,都可以省略不写
- 仅在接口只有一个抽象方法的时候,这种接口称为函数式接口
- 传递的方法或参数必须是Lambda对应接口类型,才能Lambda作为该接口实例
可以省略的内容:
- (参数列表):括号中参数列表的数据类型可以省略不写
- (参数列表):如果参数只有一个,类型和()都可以省略
- {方法体},如果代码只有一行,无论是否有返回值,{},return,分号都可以省略,必须一起省略
- 注:()里什么都没有不能省略
- 下面代码优化
//优化简写,省略了数据类型和{} return ;
Arrays.sort(person,(o1, o2) -> o1.getAge()-o2.getAge());
//优化简写,省略了{}和;
cookFood(() -> System.out.println("我最简单"));
练习一:
- 给定一个厨子接口,内含抽象方法,无参,无返回值
public interface Cook{
public abstract void makeFood();
}
- 在main中打印输出接口抽象方法的实现
public class Demo01 {
public static void main(String[] args) {
//原型
cookFood(new Cook() {
@Override
public void makeFood() {
System.out.println("我太难了");
}
});
//使用Lambda表达式
cookFood(()->{
System.out.println("我实现了接口方法");
});
//优化简写
cookFood(() -> System.out.println("我最简单"));
public static void cookFood(Cook cook){
cook.makeFood();
}
}
练习二:数组排序简化,Lambda表达式有参数
- Person类
package cn.learn.thread.Lambda.practice;
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- 数组排序
package cn.learn.thread.Lambda.practice;
import java.util.Arrays;
import java.util.Comparator;
public class Demo {
public static void main(String[] args) {
//使用数组存储Person对象
Person[] person = {
new Person("sda",12),
new Person("sa",19),
new Person("da",10)
};
/* //使用Arrays的sort方法进行排序,升序
Arrays.sort(person, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
});*/
//使用Lambda表达式
Arrays.sort(person,(Person o1, Person o2)-> {
return o1.getAge()-o2.getAge();
});
//优化简写
Arrays.sort(person,(o1, o2) -> o1.getAge()-o2.getAge());
//增强for循环打印输出
for (Person p:person) {
System.out.println(p);
}
}
}
练习三:Lambda表达式求和
- 定义一个计算器接口
package cn.learn.thread.Lambda.practice;
public interface Calculator {
public abstract int calc(int ...sum);
}
- 实现运算
package cn.learn.thread.Lambda.practice;
public class Demo01 {
public static void main(String[] args) {
//使用匿名的方法求和
//运行步骤:匿名创建实现类->实现类实现(重写)接口方法->传递匿名实现类->
//->传递不定数量的数值->c.calc(sNum)调用接口方法计算值,并返回值给sum
int sum = sumNumber(new Calculator() {
int sum=0;
//重写方法,无实参值运算
@Override
public int calc(int... num) {
for (int n: num) {
sum+=n;
}
return sum;
}
},7,8,9);
//使用Lambda表达式简写
int sum01= sumNumber((int ...num)->{
int temp=0;
for (int n: num) {
temp+=n;
}
return temp;
},74,22);
System.out.println(sum);//24
System.out.println(sum01);//96
}
public static int sumNumber(Calculator c, int ...sNum){
//把数组地址给接口方法的不定值num
int sum = c.calc(sNum);
return sum;
}
}
Lambda -语法使用,代码简化的更多相关文章
- 初探Lambda表达式/Java多核编程【3】Lambda语法与作用域
接上一篇:初探Lambda表达式/Java多核编程[2]并行与组合行为 本节是第二章开篇,前一章已经浅显地将所有新概念点到,书中剩下的部分将对这些概念做一个基础知识的补充与深入探讨实践. 本章将介绍L ...
- Lambda语法篇
函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口. Lambda语法 包含三个部分 一个括号内用逗号分隔 ...
- Lambda表达式常用代码示例
Lambda表达式常用代码示例 2017-10-24 目录 1 Lambda表达式是什么2 Lambda表达式语法3 函数式接口是什么 3.1 常用函数式接口4 Lambdas和Streams结合使 ...
- jdk1.8的lambda语法(转)
原文链接:http://www.jb51.net/article/115081.htm 代码: package com.jdk_8; import org.junit.Test; import jav ...
- 通过这些示例快速学习Java lambda语法
对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏.但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然. Java中lambd ...
- java1.8学习-什么样的匿名内部类能被lambda语法代替?
java1.8学习-什么样的匿名内部类能被lambda语法代替? java1.8好多新的特性真的很有意思,特别是Lambda.在学习的时候发现并不是所有的匿名内部类都可以用Lambda代替. lamb ...
- 轻量级jQuery语法高亮代码高亮插件jQuery Litelighter。
<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>jQ ...
- Golang语法与代码格式速记【转】
// Description: Golang语法与代码格式速记 // Author: cxy // Date: 2013-04-01 // Version: 0.3 // TODO 说明 // TOD ...
- SQL,LINQ,Lambda语法对照图(转载)
如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...
- Lisp使用Lambda语法
lamdba 其实就是一个匿名函数. 定义Lisp的lambda语法非常的简单,如下: (lambda ([parameter]) [experssion]) 调用lambda的语法有三种方法,如下: ...
随机推荐
- selenium 等待时间3种方式
强制等待 sleep() -- 最不建议用 缺点:sleep(10)网络不好的情况,到10秒就抛出异常网络很好,1秒钟就响应了,白白等待多9秒 隐式等待 -- 也不是很理想的方法implicitly_ ...
- win32 socket编程(二)——TCP/IP
一.大端.小端法定义 1.1小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端. (主机字节顺序) 1.2 大端法(Big-Endian ...
- spark复习笔记(4):RDD变换
一.RDD变换 1.返回执行新的rdd的指针,在rdd之间创建依赖关系.每个rdd都有一个计算函数和指向父rdd的指针 Spark是惰性的,因此除非调用某个转换或动作,否则不会执行任何操作,否则将触发 ...
- Linux--shell三剑客<sed>--07
1.sed(stream editor): 作为行编辑器,对文本进行编辑(以行为单位) 默认显示输出所有文件内容 注意:sed编辑文件,却不改变原文件 2.sed的工作原理: 指定一个文本文件,依次读 ...
- windows重装系统之前与之后进行的操作
1.原系统的备份 避免重装遇到故障无法恢复,给自己留一条后路. 重装系统之前首先进行一次系统备份,我使用的备份软件是dism++,这个软件还可以完成其他的诸如空间回收.系统优化等操作: 软件地址:ht ...
- Sass:@at-root
@at-root 从字面上解释就是跳出根元素.当你选择器嵌套多层之后,想让某个选择器跳出,此时就可以使用 @at-root.来看一个简单的示例: .a { color: red; .b { color ...
- CSS--使用CSS Grid(网格)布局
.一 CSS Grid(网格布局)简介 CSS Grid 布局由两个核心组成部分是父元素和子元素,父元素 是实际的 grid(网格),子元素是 grid(网格) 内的内容.下面是一个父元素和六个子元素 ...
- 【HbuilerX-Bug】终端无法显示打印信息,也无法输入
经过调试HbuilderX“终端”插件,最终定位问题,问题是插件在打开终端时,无法定位具体的窗口程序,如“cmd.exe”.“powershell.exe”等.可能产生原因:1.可能是电脑系统升级产生 ...
- MyCat的启动
启动MyCat: ./mycat start 查看启动状态: ./mycat status 停止: ./mycat stop 重启: ./mycat restart
- springmvc上传文件异常
症状: error:org.springframework.web.multipart.MultipartException: Current request is not a multipart r ...