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的语法有三种方法,如下: ...
随机推荐
- jQuery——复选框操作
学习jQuer对表单.表格操作的过程中,按照书上的例子发现一个问题: <!DOCTYPE html> <html> <head> <title>复选框应 ...
- Vue Cli3 TypeScript 搭建工程
Vue Cli3出来也一段时间了,我想尝试下Vue结合TypeScript搭建个工程,感受下Vue下用TS...网上有一篇讲的非常详细的教程 vue-cli3.0 搭建项目模版教程(ts+vuex+ ...
- C# 实现实体类和Xml转换
一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...
- openstack stein部署手册 6. nova-api
# 建立数据库用户及权限 create database nova; grant all privileges on nova.* to nova@'localhost' identified by ...
- linux相关认证和权限配置
[root@rsync-server-1 /]# echo 'rsync_backup:redhat' > /etc/rsync.password [root@rsync-server-1 /] ...
- less:运算
less中的运算 -任何数字.颜色或者变量都可以参加运算,运算应该被包裹在括号中. -例如:+-*. @width: 30px; .box { width: (20 + 5) * @width; } ...
- MySQL重复数据中限定操作n条
对于一个表,有时可能里面有很多重复的条,比如: +-----------+---------+| coupon_id | user_id |+-----------+---------+| 8 | 1 ...
- django之路由的理解
一:路由 简单的路由过程图: 1. 路由的定义位置 路由定义方式一:主路由和子路由分开定义 主路由的定义 urls.py from django.conf.urls import url from d ...
- vue项目中router路由配置
介绍 路由:控制组件之间的跳转,不会实现请求.不用页面刷新,直接跳转-切换组件>>> 安装 本地环境安装路由插件vue-router: cnpm install vue-rou ...
- java源码生成可运行jar
参考资料:https://blog.csdn.net/whatday/article/details/54767187 源码目录层级如下: