JDK1.8的新特性之Lambda表达式的应用
来源:互联网 发布:服务器坏了 raid 数据 编辑:程序博客网 时间:2024/06/05 07:33
jdk1.8中将简单的函数式接口的实现方式做了优化,并创造了一些全新的语法及操作符,如“->”,该操作符称为箭头操作符或lambda操作符,还提供了大量的默认的函数式接口,方便开发者使用,使用lambda表达式可以大幅降低代码的冗余,以下就是一些linmbda表达式及其4个核心函数式接口的使用。
package com.ilike.test;
import java.util.Comparator;
import java.util.function.Consumer;
import org.junit.Test;
/**
*
* @author 桑伟东
*
* 一.lambda 表达式的基础语法:java8中引入了一个新的操作符“->”,该操作符称为箭头操作符或lambda操作符
* 箭头操作符将lambda表达式拆分成两部分:
* 左侧:lambda 表达式的参数列表
* 右侧:lambda 表达式所要执行的功能,即lambda体
*
* 语法格式一:无参数,无返回值
* ()->System.out.println(“hello lambda !”)
* 语法格式二:有一个参数,并且无返回值
* (x)->System.out.println(x);
* 语法格式三:若只有一个参数,小括号可以省略不写
* x->System.out.println(x);
* 语法格式四:有两个以上参数,有返回值,并且lambda体中有多条语句
* Comparator c=(x,y)-> {
* System.out.println(“函数式比较接口!”);
* return Integer.compare(x, y);
* };
* 语法格式五:若lambda体中只有一条语句,那么return和大括号都可以省略不写
* Comparator c=(x,y)-> Integer.compare(x, y);
* 语法格式六: Lambda表达式的参数列表的数据类型可以省略不写,因为JVM的编译器通过上下文可以推断出数据类型,即“类型推断”
* Comparator c=(Integer x,Integer y)-> Integer.compare(x, y);
*
* 上联: 左右遇一括号省
* 下联: 左侧推断类型省
* 横批:能省则省
*
* 二、lambda表达式需要“函数式接口的支持”
* 函数式接口:函数中只有一个抽象方法的接口,称为函数式接口。可以使用注解@FunctionalInterface修饰
* 可以检查是否是函数式接口
*
*/
public class TestLambda2 {
/** * 语法格式一:无参数,无返回值 */@Testpublic void test1() { int num = 0;// jdk1.7以前,必须是final Runnable r = new Runnable() { @Override public void run() { // TODO Auto-generated method stub System.out.println("hello lambda !" + num); } }; r.run(); System.out.println("-------------------"); Runnable r1 = () -> System.out.println("hello lambda !" + num); r1.run();}/** * 语法格式二:有一个参数,并且无返回值 */@Testpublic void test2() { Consumer<String> consumer = (x) -> System.out.println(x); consumer.accept("桑伟东是个好学生!");}/** * 语法格式三:若只有一个参数,小括号可以省略不写 */@Testpublic void test3() { Consumer<String> consumer = x -> System.out.println(x); consumer.accept("桑伟东是个好学生!");}/** * 语法格式四:有两个以上参数,有返回值,并且lambda体中有多条语句 */@Testpublic void test4() { Comparator<Integer> c = (x, y) -> { System.out.println("函数式比较接口!"); return Integer.compare(x, y); };}/** * 语法格式五:若lambda体中只有一条语句,那么return和大括号都可以省略不写 */@Testpublic void test5() { Comparator<Integer> c = (x, y) -> Integer.compare(x, y);}/** * 语法格式六: Lambda表达式的参数列表的数据类型可以省略不写,因为JVM的编译器通过上下文可以推断出数据类型,即“类型推断” */@Testpublic void test6() { Comparator<Integer> c = (Integer x, Integer y) -> Integer.compare(x, y);}
}
package com.ilike.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import org.junit.Test;
/**
*
* @author 桑伟东
* java8中四大内置核心函数式接口
*
* Consumer:消费型接口
* void accept(T t);
*
* Supplier:供给型接口
* T get();
*
* Function
- JDK1.8的新特性之Lambda表达式的应用
- jdk1.8 新特性之 lambda表达式
- JDK1.8的新特性之lambda表达式的三种引用
- Android 使用jdk1.8新特性之lambda表达式
- Java JDK1.8新特性Lambda 表达式
- JDK1.8新特性--Lambda 表达式
- JDK1.8新特性(二)Lambda表达式入门
- jdk1.8新特性之Lambda表达式及在Android Studio中的使用
- 【C++】C++11新特性 之 lambda表达式的使用
- Java 8 新特性之 Lambda 表达式
- Java 8 新特性之 Lambda表达式
- Java 8的新特性(含Lambda表达式)
- JDK1.5-JDK1.8的新特性
- jdk1.8的新特性
- JDK1.8的新特性之Stream流的使用
- JDK 8新特性学习之Lambda表达式
- C++ 11 新特性之 lambda表达式
- C++11 新特性之 Lambda表达式
- [DP] TopCoder SRM548 Div1 450. KingdomAndDice
- 微信公众号插入地图及地图搜索资源的前端处理(坐标系转码,自动定位等业务实现)
- 剑指offer—构建乘积数组
- 服务器端的应用及服务,监控管理
- 关于dp和记忆化搜索
- JDK1.8的新特性之Lambda表达式的应用
- 论文笔记【Local-DPP: An improved DNA-binding protein prediction method by exploring local evolutionary】
- jzoj5498 【清华集训2017模拟12.10】大佬的难题 巧妙容斥
- JAVA---抽象与接口
- 利用colinux制作tinycolinx,在ecs上打造server farm和vps iaas环境代替docker
- 项目中常用的19条MySQL优化
- java之抽象对象和类与接口的区别
- TypeError: 'AxesSubplot' object is not subscriptable的解决办法
- 字符串的分割