Java8新特性-lambda表达式简单解释

栏目: 编程语言 · Java · 发布时间: 6年前

内容简介:版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/love905661433/article/details/82818714

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/love905661433/article/details/82818714

lambda表达式格式

  • (参数) -> 单行语句; 不需要显式return, lambda表达式能自行判断出返回值
  • (参数) -> {多行语句}; 如果方法有返回参数的话,需要显式的使用return
  • (参数) -> 表达式;

函数式接口

对于只包含一个抽象方法的接口, 可以通过lambda表达式创建该接口的对象. 这种接口称为函数式接口

可以使用@FunctionalInterface

例如使用Lambda表达式来实现Runnable接口:

/**
		 * 使用lambda式实现函数式接口时,只能转换成对应的接口对象, 转换成object对象都是错误的
		 * 如下面这条语句编译会报错 : Object obj = () -> System.out.println("使用lambda表达式来实现Runnable接口") ; 
		 * 输出结果: 使用lambda表达式来实现Runnable接口
		 */
		Runnable r1 = () -> System.out.println("使用lambda表达式来实现Runnable接口") ;
		new Thread(r1).start();
  • 需要注意的时, 如果你的lambda式存在检查期异常, 那么该异常需要在目标接口的抽象方法中进行声明. 如Runnable r2 = () -> Thread.sleep(100);这个lambda表达式无法编译通过.

方法引用

有时候你想传递给其他代码的操作已经有实现的方法了. 就可以使用方法引用

方法引用格式

  • 引用静态方法 : 类名称 :: 静态方法名称
  • 引用某个对象的方法 : 实例化对象 :: 普通方法
  • 引用特定类型的方法 : 特定类 :: 普通方法
  • 引用构造方法 : 类名称 :: new

方法引用使用样例

引用静态方法 :

// 声明为函数式接口
interface IMethodRef{
	void print(String s);
}

public static void main(String [] args) {
    /**
     * 将IMethodRef中print方法的实现指向System.out.println方法
     * 这里同样的,接口只能有一个抽象方法
     * 输出结果 : Hello World
     */
    IMethodRef ref = System.out :: println;
    ref.print("Hello World");
}

引用某个对象的方法 :

// 声明为函数式接口
@FunctionalInterface
interface IMethodRef{
	String upper();
}

public static void main(String [] args) {
    /**
	 * "Hello World" : 表示一个String实例
	 *  IMethodRef的upper方法,引用String实例的toUpperCase()方法,等同于"Hello World".toUpperCase()
	 *  输出结果 : HELLO WORLD
	 */
    IMethodRef ref = "Hello World" :: toUpperCase;
    System.out.println(ref.upper()) ;
}

引用特定类型的方法 :

@FunctionalInterface
interface IMethodRef{
	int compareTo(BigDecimal big1, BigDecimal big2);
}

public static void main(String [] args) {
	IMethodRef ref = BigDecimal :: compareTo;
	// 等同于调用BigDecimal.ONE.compareTo(BigDecimal.ZERO), 输出结果是1
	System.out.println(ref.compareTo(BigDecimal.ONE, BigDecimal.ZERO)) ;
	// 等同于调用BigDecimal.ZERO.compareTo(BigDecimal.ONE) , 输出结果是-1
	System.out.println(ref.compareTo(BigDecimal.ZERO, BigDecimal.ONE)) ;
	
}

引用构造方法 :

package lambda;

class Person{
	private String name;
	private int  age;
	
	public Person(String name, int age) {
		this.name = name ;
		this.age = age ;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]" ;
	}
}

// 声明为函数式接口
@FunctionalInterface
interface IMethodRef<T>{
	T create(String name, int age);
}

public class MethodRefTest2 {
	
	public static void main(String [] args) {
		// 表示IMethodRef的create引用Person的构造方法来实现
		IMethodRef<Person> ref = Person :: new;
		Person p = ref.create("七夜雪", 18);
		// 输出结果, Person [name=七夜雪, age=18]
		System.out.println(p) ;
	}
	
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网页配色实用手册

网页配色实用手册

温鑫工作室 / 科学 / 2011-9 / 59.00元

《网页配色实用手册》在日常生活中,色彩早已广泛地深入到人们的精神生活和物质生活中,它是一种能够激发情感、刺激感官的重要元素。《网页配色实用手册》 从色彩的应用范围和网页设计行业需求出发而编写。全书共分为9章,第1章~第2章主要介绍色彩的基础知识、网页与多媒体的相关知识,帮助读者掌握最基本的理论;第3章主要介绍明度、纯度以及色彩感觉的配色,引领读者深入学习;第4章~第8章分别根据网站的属性、网站的地......一起来看看 《网页配色实用手册》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试