使用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. Waiting for table flush 阻塞查询的问题

    1.此状态表示大量thread正在等待慢查询语句执行完成. 原因: The thread got a notification that the underlying structure for a ...

  2. Rabbitmq 运维

    Rabbitmq 运维 一.安装: 安装ncurses wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz tar zxf ncurses-6 ...

  3. JavaScriptDOM对象和jQuery对象的互相转换

    前言: 首先我们思考能不能直接在jQuery对象上调用原生DOM对象的方法或者直接在原生DOM对象调用jQuery对象呢?答案是否定的,我们看下把body背景色变为红色的代码: $("bod ...

  4. centos误删除文件如何恢复

    当意识到误删除文件后,切忌千万不要再频繁写入了,否则你的数据恢复的数量将会很少. 而我们要做的是,第一时间把服务器上的服务全部停掉,直接killall 进程名 或者 kill -9 pid . 然后把 ...

  5. 解决SVN异常 cleanup failed

    winndows上偶尔使用SVN的时候就会整出一些有的没的问题,比如"cleanup failed to process the following paths previous opera ...

  6. Java垃圾回收【GC】机制详解

    一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二. ...

  7. php import require include use vendor

    一.use  调用命名空间 用法. use app\common\controller\Index as commonIndex 或  use app\common\controller\Index ...

  8. Python PEP8代码书写规范

    摘自: 规范 https://blog.csdn.net/ratsniper/article/details/78954852

  9. 对props的研究

    Vue.component('my-component', { props: { // 基础的类型检查 (`null` 匹配任何类型) propA: Number, // 多个可能的类型 propB: ...

  10. python的可视化展示(待更新)

    参考:https://www.cnblogs.com/zhizhan/p/5615947.html 通过matplotlib进行绘图: 例1: import matplotlib.pyplot as ...