时间:2021-05-19
什么是Lambda表达式,java8为什么使用Lambda表达式?
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。我们可以把 Lambda表达式理解为是 一段可以传递的代码。最直观的是使用Lambda表达式之后不用再写大量的匿名内部类,简化代码,提高了代码的可读性。
// 启动一个线程,不使用Lambda表达式 new Thread(new Runnable() { @Override public void run() { System.out.println("启动一个线程"); } }).start(); //使用Lambda表达式,只需要一行代码 new Thread(() -> System.out.println("启动一个线程")).start();Lambda表达式的基本语法和格式
基本语法
① 无参数,无返回值。( ) -> System.out.println(“hello”)
// 实现Runnable接口(无参,无返回) Runnable r = () -> System.out.println("hello lambda");② 一个参数(小括号可以省略不写,习惯上加上小括号),无返回值。(x) -> System.out.println(x)
//Consumer接口(一个参数,无返回值),之后会提到 //第一种,小括号不省略 Consumer<String> c = (x) -> System.out.print(x); c.accept("hello"); //小括号省略 Consumer<String> c1 = x -> System.out.print(x); c1.accept("hello")③ 有多个参数,并且lambda有多条语句,则lambda语句必须用大括号括起来并有return返回(若有一条语句则可以省略大括号和return),有返回值。(x,y) ->{System.out.println(“hello”);return Integer.compare(x, y);};
//Comparator接口 //多条语句 Comparator<Integer> comparator = (x,y) ->{ System.out.println("hello"); return Integer.compare(x, y); }; //一条语句 Comparator<Integer> comparator2 = (x,y) -> Integer.compare(x, y); System.out.println(comparator2.compare(23, 22));还有其他的一些格式都是大同小异,这里就不再了解。
函数式接口是什么?
在前面也提到了函数接口,那么函数接口到底是什么呢?是个接口,只包含一个抽象方法,那么它就是函数式接口,我们可以在任意函数式接口上使用 @FunctionalInterface 检查它是否是一个函数式接口。
函数式接口里是可以包含默认方法、静态方法,他们不是抽象方法;也可以包含Java.lang.Object里的public方法,因为任何一个类都继承Object类,包含了来自java.lang.Object里对这些抽象方法的实现,也不属于抽象方法;函数式接口里允许子接口继承多个父接口,但每个父接口中都只能存在一个抽象方法,且必须的相同的抽象方法。
Java8内置函数式接口
四大核心函数式接口
函数式接口 方法 参数类型 返回类型 作用 Consumer<T> 消费型接口 void accept(T t) T void 对T类型的参数进行操作 Supplier<T> 供给型接口 T get() 无 T 操作数据,返回T类型的结果 Function<T, R> 函数型接口 R apply(T t) T R 对T类型参数进行操作,并返回R类型的结果 Predicate<T> 断定型接口 boolean test(T t) T boolean 确定T类型参数是否满足某约束,并返回boolean值
//Consumer<T> 消费型接口 @Test public void test1(){ Consumer<String> c = (x) -> System.out.println("hello:"+x+"!"); c.accept("Java"); } // Supplier<T> 供给型接口 @Test public void test2(){ Supplier<String> s = () -> "hello,beautiful girl"; String str = s.get(); System.out.println(str); } //Function<T,R> 函数性接口 @Test public void test3(){ Function<String, Integer> f= (x) -> x.length(); Integer len = f.apply("hello"); System.out.println(len); } //Predicate<T> 断言型接口 @Test public void test4(){ Predicate<String> p = (x) -> x.length()>5; boolean b = p.test("hello Java"); System.out.println(b); }其它函数式接口
函数式接口 方法 参数类型 返回类型 作用 BiFunction<T , U, R > R apply(T t, U u) T, U R 对 T, U 类型的参数进行操作,并返回R类型的结果 UnaryOperator<T> (Function 子接口) T apply(T t) T T 对 T类型的参数进行一元运算,并返回R对象的结果 BinaryOperato<T,R> (BiFunction 子接口) ) T apply(T t1, T t2 T, T T 对T类型的参数进行二元运算,并返回T类型的结果 BiConsumer<T, U> void accept(T t, U u) T, U void 对T,作 ToIntToIntFunction<T> ToLongFunction<T> ToDoubleFunction<T> int(long,double) applyAsInt(T value) T int, long, double 计 算 int 、 long 、double值的函数 IntFunction<R> LongFunction<R> DoubleFunction<R> R apply(int(long,double) value) int, long, double R 参数分别为int、long、double 类型的函数
总结
以上所述是小编给大家介绍的Java8新特性Lambda表达式和函数式接口,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java8新特性内建函数式接口 在之前的一片博文Lambda表达式,提到过Java8提供的函数式接口。在此文中,将介绍一下Java8四个最基本的函数式接口
一、Lambda表达式简介Lambda表达式,是Java8的一个新特性,也是Java8中最值得学习的新特性之一。(另一个新特性是流式编程。)Lambda表达式,
Java8新特性Lambda表达式实例详解在介绍Lambda表达式之前,我们先来看只有单个方法的Interface(通常我们称之为回调接口):publicint
Java8中的lambda表达式、::符号和Optional类0.函数式编程函数式编程(FunctionalProgramming)属于编程范式(Program
前言上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式。现在继续Java8新语言特性的学习,今天,我们要学习的是默认方法和静态接