Java 8系列之Lambda表达示

Java 8系列:
Java 8系列之Lambda表达示
Java 8系列之StreamApi
Java 8系列之Collector
Java 8系列之Optional
Java 8系列之Future

1.Lambda的基本语法

(parameters) -> expression 或(请注意语句的花括号)
(parameters) -> { statements; }

2.Lambda表达示的使用场景

在函数式接口上使用Lambda表达式

函数式接口就是只定义一个抽象方法的接口
Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例(用匿名内部类也可以完成同样的事情,只不过比较笨拙:需要提供一个实现,然后再直接内联将它实例化)

    Integer[] aa=new Integer[]{2,3,8,6,3};
        @Test
        public void test1(){
            //使用匿名类
            Collections.sort(Arrays.asList(aa), new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return Integer.compare(o1, o2);
                }
            });
            System.out.println(Arrays.toString(aa));
        }
        @Test
        public void test2(){
            //使用Lambda
            Collections.sort(Arrays.asList(aa), (o1, o2) ->Integer.compare(o1, o2));
            System.out.println(Arrays.toString(aa));
        }

3.函数描述符

函数式接口的抽象方法的签名基本上就是Lambda表达式的签名。我们将这种抽象方法叫作函数描述符.

例如,Comparator接口可以看作一个接受两个参数并返回一个整数的函数签名,
因为它只有一个叫作compare的抽象方法,这个方法受两个参数并返回一个整数
Lambda表达式是怎么做类型检查:函数描述符,即抽象方法的签名要和Lambda表达式的签名一致
常见函数描述符的函数式接口:
Predicate
java.util.function.Predicate接口定义了一个名叫test的抽象方法,它接受泛型T对象,并返回一个boolean。

    Predicate<String> nonEmptyStringPredicate = (String s) -> !s.isEmpty();

Consumer
java.util.function.Consumer定义了一个名叫accept的抽象方法,它接受泛型T
的对象,没有返回(void)。你如果需要访问类型T的对象,并对其执行某些操作,就可以使用这个接口。

    Consumer<Integer> print=o-> System.out.println(o);

Function
java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个
泛型T的对象,并返回一个泛型R的对象。

 Function<String, Integer> trans=o->o.length();

4.类型检查

Lambda的类型是从使用Lambda的上下文推断出来的
首先,你要找出sort方法的声明,。
第二,Comparator(目标类型)对象是sort()方法的第二个正式参数。
第三,Comparator是一个函数式接口,定义了一个叫作compare的抽象方法。
第四,compare方法描述了一个函数描述符,它可以接受两个Integer,并返回一个Integer。
最后,sort第二个参数的任何实际参数都必须匹配这个

5.方法引用

Lambda的一种快捷写法

     @Test
  public void test3(){
      Collections.sort(Arrays.asList(aa), Integer::compare);
      System.out.println(Arrays.toString(aa));
  }
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值