DK8的新特性,Lambda表达式的使用示例

Lambda表达式,是JDK8的新特性。

package com.edu.jdk8;

import java.util.function.Consumer;

import org.junit.Test;

/**
 * JDK8的新特性:Lambda表达式
 */
public class LambdaTest {
	@Test
	public void test02() {
		Consumer<String> con1 = new Consumer<String>() {//java.util.function.Consumer;
			@Override
			public void accept(String t) {
				System.out.println(t);
			}
		};
		con1.accept("hello world!");
		
		System.out.println("---------------------");
		
		Consumer<String> con2 = (String t) -> System.out.println(t);
		con2.accept("hello world.....");
		
		System.out.println("--------------------");
		
		Consumer<String> con3 = (t) -> System.out.println(t);
		con3.accept("haha");
	}
	
	@Test
	public void test01() {
		Runnable r1 = new Runnable() {
			@Override
			public void run() {
				System.out.println("hello world!");
			}
		};
		r1.run();
		
		System.out.println("---------------------");
		
		Runnable r2 = () -> System.out.println("hello world!");
		r2.run();
	}
}

使用Lambda表达式的前提条件

package com.edu.jdk8;

import java.util.Comparator;
import java.util.function.BinaryOperator;
import java.util.function.Consumer;

import org.junit.Test;

/**
 * 要想使用Lambda表达式,前提条件是:
 * 1、被实现化对象一定要接口
 * 2、该接口只有一个抽象方法
 * 
 * 在接口上可以使用@FunctionalInterface函数式接口的注解来定义,
 * 其作用是为了在编码阶段进行验证
 * 
 * Lambda表达的几种方式:
 * 
 */
public class LambdaTest02 {
	// 语法格式一:无参,无返回值,Lambda 体只需一条语句
	@Test
	public void test01() {
		Runnable r1 = new Runnable() {
			@Override
			public void run() {
				System.out.println("runnable.....");
			}
		};
		r1.run();
		
		System.out.println("---------------");
		
		Runnable r2 = () -> System.out.println("runnable.....");
		r2.run();
	}
	
	// 语法格式二:Lambda 需要一个参数,且无返回值
	@Test
	public void test02() {
		Consumer<String> con1 = new Consumer<String>() {
			@Override
			public void accept(String t) {
				System.out.println(t);
			}
		};
		con1.accept("hello world!");
		
		System.out.println("---------------------");
		
		// 类型推断
		Consumer<String> con2 = (String t) -> System.out.println(t);
		con2.accept("hello world.....");
		
		System.out.println("--------------------");
		
		Consumer<String> con3 = (t) -> System.out.println(t);
		con3.accept("haha");
		
	}
	
	// 语法格式三:Lambda 只需要一个参数时,参数的小括号可以省略
	@Test
	public void test03() {
		Consumer<String> con1 = new Consumer<String>() {
			@Override
			public void accept(String t) {
				System.out.println(t);
			}
		};
		con1.accept("Consumer......");
		
		System.out.println("---------------------");
		
		Consumer<String> con2 = (t) -> System.out.println(t);
		con2.accept("Consumer......");
		
		System.out.println("---------------------");
		
		Consumer<String> con3 = t -> System.out.println(t);
		con3.accept("Consumer.....t...");
	}
	
	// 语法格式四:Lambda 需要两个参数,并且有返回值
	@Test
	public void test04() {
		BinaryOperator<Long> bo = new BinaryOperator<Long>() {
			@Override
			public Long apply(Long t, Long u) {
				return t + u;
			}
		};
		Long val = bo.apply(2L, 5L);
		System.out.println(val);
		
		System.out.println("---------------");
		
		BinaryOperator<Long> bo1 = (t, u) -> {return t + u;};
		val = bo1.apply(20L, 30L);
		System.out.println(val);
		
	}
	
	// 语法格式五:当Lambda 体只有一条语句时,return 与大括号可以省略
	@Test
	public void test05() {
		BinaryOperator<Long> bo = new BinaryOperator<Long>() {
			@Override
			public Long apply(Long t, Long u) {
				return t + u;
			}
		};
		Long val = bo.apply(3L, 7L);
		System.out.println(val);
		
		System.out.println("---------------");
		
		BinaryOperator<Long> bo1 = (t, u) -> t + u;
		val = bo1.apply(20L, 30L);
		System.out.println(val);	
	}
	
	@Test
	public void test06() {
		Comparator<Integer> com1 = new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				return Integer.compare(o1, o2);
			}
		};
		int v = com1.compare(30, 20);
		System.out.println(v);
		
		System.out.println("-----------");
		
		Comparator<Integer> com2 = (o1, o2) -> Integer.compare(o1, o2);
		v = com2.compare(5, 8);
		System.out.println(v);
		
	}
	
	// 使用自定义函数式接口
	@Test
	public void test07() {
		MyFunctionalInterface mfi = new MyFunctionalInterface() {
			@Override
			public void show(String s) {
				System.out.println(s);
			}
		};
		mfi.show("lambda");
		
		System.out.println("--------------");
		
		MyFunctionalInterface mfi1 = (String s) -> System.out.println(s);
		mfi1.show("......");
		
		MyFunctionalInterface mfi2 = (s) -> System.out.println(s);
		mfi2.show(".xxxxx");
		
		MyFunctionalInterface mfi3 = s -> System.out.println(s);
		mfi3.show(".xxxxx");	
	}
}

自定义函数式接口

package com.jdk8;

/**
 * 自定义函数式接口
 * @title MyFunctionalInterface.java
 */
@FunctionalInterface
public interface MyFunctionalInterface {
	void show(String s);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值