Java学习笔记-Lambda表达式及內建函数式接口

Lambda表达式

可以认为是一种特殊的匿名内部类

lambda只能用于函数式接口。

lambda语法:

     ([形参列表,不带数据类型])-> {
     //执行语句
     [return..;]
}
注意:

1、如果形参列表是空的,只需要保留()即可

2、如果没有返回值。只需要在{}写执行语句即可

3、如果接口的抽象方法只有一个形参,()可以省略,只需要参数的名称即可

4、如果执行语句只有一行,可以省略{},但是如果有返回值时,情况特殊。

5、如果函数式接口的方法有返回值,必须给定返回值,如果执行语句只有一句,还可以简写,即省去大括号和return以及最后的;号。

6、形参列表的数据类型会自动推断,只需要参数名称。

package com.lonly.test;  
  
public class TestLambda {  
     public static void main(String[] args) {  
           TestLanmdaInterface1 t1 = new TestLanmdaInterface1() {  
                @Override  
                public void test() {  
                     System.out.println("使用匿名内部类");  
  
                }  
           };  
           //与上面的匿名内部类执行效果一样  
           //右边的类型会自动根据左边的类型进行判断  
           TestLanmdaInterface1 t2 = () -> {  
                System.out.println("使用lambda");  
           };  
           t1.test();  
           t2.test();  
  
           //如果执行语句只有一行,可以省略大括号  
           TestLanmdaInterface1 t3 = () -> System.out.println("省略执行语句大括号,使用lambda");  
           t3.test();  
  
           TestLanmdaInterface2 t4 = (s) -> System.out.println("使用lambda表达式,带1个参数,参数为:"+s);  
           t4.test("字符串参数1");  
  
           TestLanmdaInterface2 t5 = s -> System.out.println("使用lambda表达式,只带1个参数,可省略参数的圆括号,参数为:"+s);  
           t5.test("字符串参数2");  
  
           TestLanmdaInterface3 t6 = (s,i) -> System.out.println("使用lambda表达式,带两个参数,不可以省略圆括号,参数为:"+s+"  "+ i);  
           t6.test("字符串参数3",50);  
     }  
}  
  
@FunctionalInterface  
interface TestLanmdaInterface1 {  
     //不带参数的抽象方法  
     void test();  
}  
@FunctionalInterface  
interface TestLanmdaInterface2 {  
     //带参数的抽象方法  
     void test(String str);  
}  
@FunctionalInterface  
interface TestLanmdaInterface3 {  
     //带多个参数的抽象方法  
     void test(String str,int num);  
} 


內建函数式接口

1.功能型函数式接口

public interface Function<T,R>{
	public R apply(T t);
}
例如:

Function<Integer,String> fun = String::valueOf;
// 或者 IntFunction<String> fun = String::valueOf;
System.out.println(fun(1000));
2.供给型函数式接口
public interface Suppiler<T>{
	public T get();
}

例如:

Supplier<String> sup = "hello"::toUpCase;
System.out.println(sup.get());

3.断言型函数式接口
public interface Predicate<T>{
	public boolean test(T t);
}

例如:

Predicate<String> pre = "##hello"::startWith;
System.out.println(pre.test("##"));
4.消费型函数式接口

public interface Consumer<T>{
	public void accept(T t);
}


例如:

Consumer<String> cons = System.out::println;
cons.accept("Hello World!");





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值