使用Lambda的方式实现线程


  • 线程中()是run方法的(),可用来接受参数,格式:
new Thread(()->{
System.out.println(Thread.currentThread().getName() + "执行");
},"Lambda线程创建").start();

Lambda标准格式:


  1. 一些参数

():接口中抽象方法的参数列表,无,就空着

  1. 一个箭头

->:把参数传递给代码块{}

  1. 一段代码块

{}:重写接口的抽象方法的方法体

Lambda表达式,是可推导,是可省略的


  • 凡是可以根据上下文推导出来的内容,都可以省略不写
  • 仅在接口只有一个抽象方法的时候,这种接口称为函数式接口
  • 传递的方法或参数必须是Lambda对应接口类型,才能Lambda作为该接口实例

可以省略的内容:

  1. (参数列表):括号中参数列表的数据类型可以省略不写
  2. (参数列表):如果参数只有一个,类型和()都可以省略
  3. {方法体},如果代码只有一行,无论是否有返回值,{},return,分号都可以省略,必须一起省略
  4. 注:()里什么都没有不能省略
  • 下面代码优化
//优化简写,省略了数据类型和{} 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 -语法使用,代码简化的更多相关文章

  1. 初探Lambda表达式/Java多核编程【3】Lambda语法与作用域

    接上一篇:初探Lambda表达式/Java多核编程[2]并行与组合行为 本节是第二章开篇,前一章已经浅显地将所有新概念点到,书中剩下的部分将对这些概念做一个基础知识的补充与深入探讨实践. 本章将介绍L ...

  2. Lambda语法篇

    函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口. Lambda语法 包含三个部分 一个括号内用逗号分隔 ...

  3. Lambda表达式常用代码示例

    Lambda表达式常用代码示例 2017-10-24 目录 1 Lambda表达式是什么2 Lambda表达式语法3 函数式接口是什么  3.1 常用函数式接口4 Lambdas和Streams结合使 ...

  4. jdk1.8的lambda语法(转)

    原文链接:http://www.jb51.net/article/115081.htm 代码: package com.jdk_8; import org.junit.Test; import jav ...

  5. 通过这些示例快速学习Java lambda语法

    对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏.但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然. Java中lambd ...

  6. java1.8学习-什么样的匿名内部类能被lambda语法代替?

    java1.8学习-什么样的匿名内部类能被lambda语法代替? java1.8好多新的特性真的很有意思,特别是Lambda.在学习的时候发现并不是所有的匿名内部类都可以用Lambda代替. lamb ...

  7. 轻量级jQuery语法高亮代码高亮插件jQuery Litelighter。

    <!DOCTYPE html><html><head><meta charset="UTF-8" /><title>jQ ...

  8. Golang语法与代码格式速记【转】

    // Description: Golang语法与代码格式速记 // Author: cxy // Date: 2013-04-01 // Version: 0.3 // TODO 说明 // TOD ...

  9. SQL,LINQ,Lambda语法对照图(转载)

    如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...

  10. Lisp使用Lambda语法

    lamdba 其实就是一个匿名函数. 定义Lisp的lambda语法非常的简单,如下: (lambda ([parameter]) [experssion]) 调用lambda的语法有三种方法,如下: ...

随机推荐

  1. redis 安装和运行

    安装redis 在CentOs虚拟机上:yum install redis,可能会出现以下错误: 解决方式:先输入yum install epel-release,之后输入:redis-server启 ...

  2. jQuery的加法运算,val()获取的结果相加变成了字符串连接。

    加法运算 ?想必大家听到这都会不屑了,加法运算这是多么简单的运算.然而有的时候在jQuery也让人挺头疼的. 常规的是: var num1 = 123; var num2=123; var total ...

  3. 了解Greenplum (2)

    一.目的 1. 理解Greenplum中的数据分布策略(random 和 distribution),分析不同分布策略的优劣:2. 理解查询执行中的数据广播和数据重分布,分析在何种情况下选择哪种策略, ...

  4. 常见3种Git服务器的构建

    学习Git不同的服务器形式,具体如下: - 创建SSH协议服务器 - 创建Git协议服务器 - 创建HTTP协议服务器 方案: Git支持很多服务器协议形式,不同协议的Git服务器,客户端就可以使用不 ...

  5. xml转dict

    xml转dict 最开始的时候一直是按格式比较严谨的XML格式进行的转换,所以一般只需要考虑两种情况就可以了,即各个节点或者子节点全相同或者全不同,全相同按list处理,全不同按dict处理,这么一想 ...

  6. paste 合并文件

    1.命令功能 paste  用于合并文件的列,把每个文件以列对列的方式,一列列地加以合并. 2.语法格式 paste  option  file 参数选项 参数 参数说明 -d 指定间隔符合并文件(默 ...

  7. LA 3263 That Nice Euler Circuit(欧拉定理)

    That Nice Euler Circuit Little Joey invented a scrabble machine that he called Euler, after the grea ...

  8. phpstorm 调试时浏览器显示The requested resource / was not found on this server

    1.进入thinkphp项目的public 目录运行以下命令即可 root@jiang:/var/www/tp5# php -S localhost:8080 router.php PHP 7.2.2 ...

  9. 对微信小程序的研究2

    .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 .wxss 后缀的 WXSS 样式文件 .js 后缀的 JS 脚本逻辑文件 JSON 配置 我们可以看到在项目的根目录有 ...

  10. go入门收集(转)

    go mod 使用 原文地址: https://juejin.im/post/5c8e503a6fb9a070d878184a