微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java8新特性:lambda表达式总结

这篇文章主要介绍了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.java8; 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("ttt 我叫刘亚壮 ", (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 消费型接口 : @Test public void test1(){ happy(10000, (m) -> System.out.println("每次消费:" + m + "元")); } public void happy(double money, Consumer con){ con.accept(money); } }

到此这篇关于Java8新特性:lambda表达式总结的文章就介绍到这了,更多相关Java lambda表达式内容搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐