Java8 特性-Lambda 表达式①

Java8 特性-Lambda 表达式①

  • Lambda格式:

  • ()-> {} 这里是基本格式,()为参数集合;而{} 则为方法体。在该表达式中,如果调用的接口没有参数,那么就用空括号表示‘()’,->只是Lambda格式,如果方法体中只有一行代码,默认省略{}方法体写法,同事省略return语句,直接将结果返回,没有返回值则返回null为void;
  1. ()->{} :没有参数且返回值为void
  2. ()-> "字符串" :没有参数,返回字符串结果;
  3. (String s1,String s2)->{if(s1.equals(s2)) return true;else return false}:方法有两个参数都是String类型,进行值对比,返回boolean结果;
  • 这里是类库中提供的默认函数式接口;

函数式接口

参数类型

返回类型

描述

Supplier

T

接收一个T类型的值

Consumer

T

处理一个T类型的值

BiConsumer<T, U>

T,U

处理T类型和U类型的值

Predicate

T

boolean

处理T类型的值,并返回true或者false.

ToIntFunction

T

int

处理T类型的值,并返回int值

ToLongFunction

T

long

处理T类型的值,并返回long值

ToDoubleFunction

T

double

处理T类型的值,并返回double值

Function<T, R>

T

R

处理T类型的值,并返回R类型值

BiFunction<T, U, R>

T,U

R

处理T类型和U类型的值,并返回R类型值

BiFunction<T, U, R>

T,U

R

处理T类型和U类型的值,并返回R类型值

UnaryOperator

T

T

处理T类型值,并返回T类型值,

BinaryOperator

T,T

T

处理T类型值,并返回T类型值

  • 调用自定义函数接口

  • 函数式接口只需要关注参数和返回值就好,如果类库中已经存在,最好使用类库中的函数接口;
  • 换一种思想,可以当作Lambda表达式是接口的抽象方法实现就好,最基本的我们可以写实现类,或者用匿名函数实现,有了Lambda我们可以用它实现,也就是想接口传递了一个实现方法而已;

 

例子①

  • 该函数式接口参数为任意类型,但是返回值必须为字符串,Lambda格式为(T t)-> {return "字符串";}
package com.interfaces;

@FunctionalInterface
public interface LambdaInterface<T> {

    String test01(T t);
}
  • 解释:
  1. (String s) -> s.toUpperCase(),满足函数式接口需求,参数一个任意类型,这里给的是String;
  2. 方法体只有一行代码,默认省略return语句,直接返回结果,是String类型数据大写,返回String;
  3. stringLambdaInterface.test01( "hello lambda!" ),直接调用接口并传参;
public static void main(String[] args) {
        LambdaInterface<String> stringLambdaInterface = (String s) -> s.toUpperCase();
        String result = stringLambdaInterface.test01( "hello lambda!" );
        System.out.println(result);
    }
  • 测试结果:

例子② 

  • 该自定义函数式接口有两个参数,一个是任意类型,另一个为String,返回boolean;
  • Lambda表达式为(T t,String str)->{return boolean;}
package com.interfaces;

@FunctionalInterface
public interface LambdaInterface2<T> {

    boolean test01(T t,String s);
}
  • 解释:
  1. (Object o1, String s2) -> o1.toString().equals( s2 ),该表达式有两个参数,Object和String;
  2. 通过比较值,返回比较结果,equals方法返回boolean;
public static void main(String[] args) {
        LambdaInterface2<Object> objectLambdaInterface2 = (Object o1, String s2) -> o1.toString().equals( s2 );
        boolean result = objectLambdaInterface2.test01( "sss", "sss" );
        System.out.println(result);
    }
  • 运行结果:

  • 通过上面的例子,接口是函数就是有且只有一个的抽象方法的接口,然后不需要实现类去实现方法体,根据业务逻辑,随时需要随时用Lambda表达式随时实现业务逻辑细节,用返回对象调用函数是接口时,其中经历的业务处理则是刚刚用Lambda表达式写的逻辑

chenyb 随笔记录,只为方便自己学习

2019-10-15

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值