浅析Java8新特性Lambda表达式和函数式接口
|
什么是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 检查它是否是一个函数式接口。 Java8内置函数式接口 四大核心函数式接口
//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);
}
其它函数式接口
总结 以上所述是小编给大家介绍的Java8新特性Lambda表达式和函数式接口,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持! 您可能感兴趣的文章:
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
