Java8之Lambda表达式

目录

简介

规则 

代码说明

 特殊语法

方法引用

数组引用

构造器引用


简介

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

  • 规则 

1. lambda表达式可以有零个、一个或多个参数;
2. 可以显式声明参数的类型,也可以从上下文推断参数的类型;
3. 多个参数必须包含在括号中,并用逗号分隔,空括号用于表示零个参数;
4. 当只有一个参数时,如果推断它的类型,可以不使用括号。如 a -> return a * a;
5. lambda表达式的函数体可以包含零个,一个或多个语句;
6. 如果lambda表达式的函数体只有一行,则可以不用大括号,匿名函数的返回类型与函数体表达式的返回类型相同。当函数体中大于一行代码则需要用大括号包含。
  • 代码说明

public static void lambda(){
    //无参数表达式
    Supplier<Integer> integerSupplier = () -> 2;
    System.out.println(integerSupplier.get());
   //一个参数: a -> System.out.println(a);
   //多个参数需要加括号: (a,b) -> a+b;
   //多个语句需要加大括号: (a,b,c) -> { int s = a+b;  s+=c;}
}
  •  特殊语法

  • 方法引用

    * 对象::实例方法名;
    * 类::静态方法名;

    * 类::实例方法名

    @Test
    public void test4() {   
         Comparator<Integer> com = (x,y) -> Integer.compare(x, y);
    //        类::静态方法名;  静态方法返回值必须和函数式接口的返回值类型一致
            Comparator<Integer> comp2 = Integer::compare;
            //比较两个字符串相等
            BiPredicate<String, String> bi = (x, y) -> x.equals(y);
            boolean flag = bi.test("2", "2");
    //        类::实例方法名;lambda参数列表中第一个参数是实例方法的调用者,而且第二个参数是实例方法的参数时,可以使用ClassName::merhod
            BiPredicate<String, String> bi2 = String::equals;
    
    
            //对象::实例方法名;
            PrintStream out = System.out;
            Consumer<String> coms = out::println;
            Consumer<String> coms2 = System.out::println;
    }
  • 数组引用

Type::new

@Test
public void test4() {       
  //数组引用
//        Type::new
        Function<Integer, String[]> fun = String[]::new;
        String[] str = fun.apply(10);
        System.out.println(str);
}
  • 构造器引用

//ClassName::new
//构造器引用方法,根据函数式接口的参数个数,决定调用的构造器

@Test
public void test4() { 
Supplier<User> sup = () -> new User();
//ClassName::new
//构造器引用方法,根据函数式接口的参数个数,决定调用的构造器
Supplier<User> sup2 = User::new;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值