下面这几个接口都属于函数式接口(只有一个抽象方法的接口)
注意:
Comparator<T>也是一个抽象接口,虽然它有两个抽象方法 int compare(T o1, T o2)和boolean equals(Object obj)
官方表示:
Ifaninterfacedeclaresanabstractmethodoverridingoneofthepublicmethodsofjava.lang.Object,thatalsodoesnotcounttowardtheinterface'sabstractmethodcountsinceanyimplementationoftheinterfacewillhaveanimplementationfromjava.lang.Objectorelsewhere.
如果接口声明了一个覆盖java.lang.Object的全局方法之一的抽象方法,那么它不会计入接口的抽象方法数量中,因为接口的任何实现都将具有java.lang.Object或其他地方的实现。
/* Consumer<T> 消费性接口 void accept(T t);
*
* Supplier<T> 供给型接口 T get();
*
* Function<T,R> 函数型接口 R apply(T t);
*
* Predicate<T> 断言型接口 boolean test(T t);
*/
@Test
public void consumer() {
Consumer<String> consumer=(s)->System.out.println(s);
consumer.accept("hello,lambda");
System.out.println("=======================");
//实例方法引用(2) 对象::实例方法名 (方法与函数式接口中方法的参数类型、参数个数,返回值类型都必须相同,构造器、数组(只能定义数组长度初始化)亦是如此)
Consumer<String> consumer2=System.out::println;
consumer2.accept("hello");
}
输出:
hello,lambda
=======================
hello
@Test
public void supplier() {
Supplier<String> supplier=()->"字符串";
String s = supplier.get();
System.out.println(s);
System.out.println("=======================");
//构造器引用 类名::new
Supplier<Employee> supplier2=Employee::new;
Employee employee = supplier2.get();
System.out.println(employee);
}
输出:
字符串
=======================
Employee [name=null, salary=null, age=null, hireDay=null]
@Test
public void function() {
Function<Integer,Integer> function=(x)->{
int num=x+10;
return num;
};
Integer num = function.apply(20);
System.out.println(num);
System.out.println("=======================");
//数组引用 类名[]::new
Function<Integer,Employee[]> function2=Employee[]::new;
Employee[] e = function2.apply(5);
System.out.println(e.length);
System.out.println("=======================");
//静态方法引用 类名::静态方法名
BinaryOperator<Integer> binaryOperator=Integer::compare;
//方法中传入参数2,3 进行比较第一个参数大于第二个参数返回1,否则返回-1
Integer max = binaryOperator.apply(2, 3);
System.out.println(max);
}
输出:
30
=======================
5
=======================
-1
@Test
public void predicate() {
Predicate<String> predicate =(s)->"张三".equals(s);
boolean test = predicate.test("李四");
System.out.println(test);
System.out.println("=======================");
//实例方法引用(2) 类名::实例方法名 根据参数类型来分辨
Predicate<String> predicate2=String::isEmpty;
//相当于"".isEmpty();
System.out.println(predicate2.test(""));
}
输出:
false
=======================
true
分享到:
相关推荐
想要快速了解并掌握Lambda表达式的可以学习
Java8 新特性Lambda表达式实例详解 Java8 中引入了Lambda表达式,这是一种函数式编程的方式,它可以使代码变得更加简洁和高效。Lambda表达式可以作为函数式接口的实例,它可以捕获外部变量,实现高效的回调机制。 ...
Java 8 新特性 Lambda 表达式和函数式接口 Java 8 中引入的 Lambda 表达式是一种可以传递的代码,旨在简化代码,提高代码的可读性。 Lambda 表达式基于数学中的λ演算得名,直接对应于其中的 lambda 抽象(lambda ...
需要环境:JDK8 下载下来后 直接导入IDE工具中,运行TestLambda、TestLambda2、TestLambda3、PracticeLambda、TestStream中的main方法就可以看见结果
Java 8引入了Lambda表达式,这是一种强大的新特性,它为Java编程语言带来了函数式编程的概念。Lambda表达式允许程序员创建匿名函数,即没有名称的函数,这些函数可以直接作为值传递给方法或存储在变量中。这使得代码...
Java 8 的 Lambda 表达式是其最显著的新特性之一,它引入了一种更为简洁、函数式的编程风格。Lambda 表达式使得处理匿名函数变得更加简单,尤其在需要定义短小、无状态的代码块时,它们可以极大提高代码的可读性和...
Java 8 新特性之 Lambda 表达式和 Optional 类 Java 8 是 Java 语言的最新版本之一,它引入了许多新的特性,包括 Lambda 表达式和 Optional 类,这些特性极大地提高了 Java 语言的编程效率和可读性。下面我们将详细...
下面将详细探讨Lambda表达式以及相关的Java 8新特性。 Lambda表达式的语法简洁明了,它定义了一个没有名称的方法,可以看作是一种函数对象。Lambda的结构通常由三部分组成:参数列表(可选类型声明)、箭头符号(->...
Java 8 的引入,尤其是Lambda表达式,对Java语言产生了深远的影响,它为Java开发者带来了更简洁、更灵活的编程方式。Lambda表达式是函数式编程的核心元素,它允许我们将函数作为方法参数传递,或者将代码块当作数据...
### Java 1.8 新特性:Lambda 表达式与 Stream 流操作 #### Lambda 表达式介绍 Lambda 表达式是 Java 1.8 中引入的一个重要特性,它使得 Java 开发者能够在代码中更加简洁地表示匿名方法。这种表达式尤其适用于...
Java 8 是一个重要的Java平台版本,因为它引入了许多新特性,其中最显著的就是Lambda表达式。Lambda表达式是函数式编程的关键元素,它允许我们以更简洁、更易读的方式编写代码,特别是在处理集合和并发任务时。在这...
适合人群:已经熟悉Java基础,希望深入学习和理解Java 8新特性的开发者。 使用场景及目标:适用于需要简化代码、提高代码可读性和可维护性的开发场景,帮助开发者掌握Lambda表达式的基本语法和高级技巧,使其能够在...
在这个"Java8集合 CompletableFuture lambda表达式 新的TimeAPI 和ForkJoin Demo包"中,我们可以深入探讨以下几个关键知识点: 1. **Lambda表达式**: Lambda表达式是Java 8的一大亮点,它简化了对匿名函数的处理...
Lambda表达式是Java 8中引入的一个重要新特性,它允许开发者以一种更加简洁的方式编写函数式接口实现代码。Lambda表达式本质上是一个匿名函数,能够作为一个参数传递给方法调用或存储在变量中,这使得Java支持了更高...
Java 8 的一个重要特性是引入了 Lambda 表达式,这一改变显著地提升了代码的简洁性和可读性,尤其是在处理集合操作时。Lambda 表达式使得 Java 更加接近函数式编程,允许开发者以一种更简洁的方式定义匿名函数。本文...
Java 8的`java.time`包引入了新的日期和时间API,其中很多操作也支持Lambda表达式,如`LocalDateTime.now().filter(date -> date.getDayOfWeek() == DayOfWeek.SATURDAY)`。 5. **CompletableFuture**: `...
总结起来,Java 8 中的接口新特性使得接口更加灵活,能够提供默认和静态方法,同时 Lambda 表达式极大地提升了函数式编程的体验。这些改变使得 Java 更加适应现代编程需求,尤其是对于并发和大数据处理等场景,使得...
Java Lambda表达式是Java 8引入的一个重要特性,它极大地简化了函数式编程风格的实现。Lambda表达式允许我们将函数作为一个值传递,就像传递其他数据类型一样。这在处理集合、事件驱动编程以及多线程等场景下尤其...
【Java8】Lambda表达式 和 Stream API 是Java编程语言中的两个重要创新,它们极大地提升了代码的简洁性和可读性,特别是在处理集合数据时。这里我们将深入探讨这两个特性,并结合实际示例来理解它们的工作原理。 ...