Java8新特性:lambda表达式总结

网友投稿 255 2023-01-01

Java8新特性:lambda表达式总结

一、Lambda 表达式的基础语法

Lambda 表达式的基础语法:java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符箭头操作符将 Lambda 表达式拆分成两部分:

左侧:Lambda 表达式的参数列表

右侧:Lambda 表达式中所需执行的功能,即 Lambda 体

语法格式一:无参数,无返回值

() -> System.out.println("Hello Lambda!");

语法格式二:有一个参数,并且无返回值

(x) -> System.out.println(x)

语法格式三:若只有一个参数,小括号可以省略不写

x -> System.out.println(x)

语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句

Comparator com = (x, y) -> {

System.out.println("函数式接口");

return Integer.compare(x, y);

};

语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写

Comparator com = (x, y) -> Integer.compare(x, y);

语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”

(Integer x, Integer y) -> Integer.compare(x, y);

二、函数式接口

Lambda 表达式需要“函数式接口”的支持

函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解 @FunctionalInterface 修饰用来检查是否是函数式接口。

Java8 内置的四大核心函数式接口

Consumer

void accept(T t);

Supplier : 供给型接口

T get();

Function : 函数型接口

R apply(T t);

Predicate : 断言型接口

boolean test(T t);

三、内置的四大核心函数式接口用法实例

package com.lyz.java8ejgLhWC;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

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 liuyazhuang

* @version 1.0.0

* @date 2018/8/19 15:02

* @description Java8 内置的四大核心函数式接口

*

* Consumer : 消费型接口

* void accept(T t);

*

* Supplier : 供给型接口

* T get();

*

* Function : 函数型接口

* R apply(T t);

*

* Predicate : 断言型接口

* boolean test(T t);

*

*/

public class TestLambda {

//Predicate 断言型接口:

@Test

public void test4(){

List list = Arrays.asList("Hello", "world", "Lambda", "www", "ok");

List strList = filterStr(list, (s) -> s.length() > 3);

for (String str : strList) {

System.out.println(str);

}

}

//需求:将满足条件的字符串,放入集合中

public List filterStr(List list, Predicate pre){

List strList = new ArrayList<>();

for (String str : list) {

if(pre.test(str)){

strList.add(str);

}

}

return strList;

}

//Function 函数型接口:

@Test

public void test3(){

String newStr = strHandler("\t\t\t 我叫刘亚壮 ", (str) -> str.trim());

System.out.println(newStr);

String subStr = strHandler("我叫刘亚壮", (str) -> str.substring(2, 5));

System.out.println(subStr);

}

//需求:用于处理字符串

public String strHandler(String str, Function fun){

return fun.apply(str);

}

//Supplier 供给型接口 :

@Test

public void test2(){

List numList = getNumList(10, () -> (int)(Math.random() * 100));

for (Integer num : numList) {

System.out.println(num);

}

}

//需求:产生指定个数的整数,并放入集合中

public List getNumList(int num, Supplier sup){

List list = new ArrayList<>();

for (int i = 0; i < num; i++) {

Integer n = sup.get();

list.add(n);

}

return list;

}

//Consumer 消费型接口 :

@Test

public void test1(){

happy(10000, (m) -> System.out.println("每次消费:" + m + "元"));

}

public void happy(double money, Consumer con){

con.accept(money);

}

}

void accept(T t);

Supplier : 供给型接口

T get();

Function : 函数型接口

R apply(T t);

Predicate : 断言型接口

boolean test(T t);

三、内置的四大核心函数式接口用法实例

package com.lyz.java8ejgLhWC;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

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 liuyazhuang

* @version 1.0.0

* @date 2018/8/19 15:02

* @description Java8 内置的四大核心函数式接口

*

* Consumer : 消费型接口

* void accept(T t);

*

* Supplier : 供给型接口

* T get();

*

* Function : 函数型接口

* R apply(T t);

*

* Predicate : 断言型接口

* boolean test(T t);

*

*/

public class TestLambda {

//Predicate 断言型接口:

@Test

public void test4(){

List list = Arrays.asList("Hello", "world", "Lambda", "www", "ok");

List strList = filterStr(list, (s) -> s.length() > 3);

for (String str : strList) {

System.out.println(str);

}

}

//需求:将满足条件的字符串,放入集合中

public List filterStr(List list, Predicate pre){

List strList = new ArrayList<>();

for (String str : list) {

if(pre.test(str)){

strList.add(str);

}

}

return strList;

}

//Function 函数型接口:

@Test

public void test3(){

String newStr = strHandler("\t\t\t 我叫刘亚壮 ", (str) -> str.trim());

System.out.println(newStr);

String subStr = strHandler("我叫刘亚壮", (str) -> str.substring(2, 5));

System.out.println(subStr);

}

//需求:用于处理字符串

public String strHandler(String str, Function fun){

return fun.apply(str);

}

//Supplier 供给型接口 :

@Test

public void test2(){

List numList = getNumList(10, () -> (int)(Math.random() * 100));

for (Integer num : numList) {

System.out.println(num);

}

}

//需求:产生指定个数的整数,并放入集合中

public List getNumList(int num, Supplier sup){

List list = new ArrayList<>();

for (int i = 0; i < num; i++) {

Integer n = sup.get();

list.add(n);

}

return list;

}

//Consumer 消费型接口 :

@Test

public void test1(){

happy(10000, (m) -> System.out.println("每次消费:" + m + "元"));

}

public void happy(double money, Consumer con){

con.accept(money);

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:圆通快递物流查询单号(圆通快递物流查询单号查询官网)
下一篇:网站api接口测试软件(api接口测试工具)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~