java lambda表达式

java lambda表达式

    1. lambda表达式写法 : (o1,o2) -> Integer.compare(o1, o2);
  • 2.格式: ->:lambda操作符,箭头操作符

    • ​ ->左边: lambda形参列表(其实就是接口中的抽象方法的形参列表)
    • ->右边: lambda体(其实就是重写的抽象方法的方法体)
  • 3.语法使用:(分6种情况)

  • 总结:

    • ->左边 :lanmbda形参列表的参数类型可以省略(类型推断):若果只有一个参数,()也可以省略
    • ->右边: lambda体应该用{}包括,若体只有一句执行语句,则{}可省略和return
  • 4.lambda本质:在java中,作为函数式接口的实例

  • 5.若果一个接口只声明一个抽象方法,则此接口称为函数式接口。

    语法格式1:无参,无返回

//语法格式1:无参,无返回
@Test
public void test1() {
    Runnable r1=new Runnable() {

        @Override
        public void run() {
            System.out.println("我爱北京!");
        }
    };
    r1.run();
    System.out.println("---------------");

    Runnable r2=()-> {
        System.out.println("我也爱北京");
    };
    r2.run();
}
//语法格式2: lambda需要一个参数,但是没有返回值。
@Test
public void test3() {
    Consumer<String> con=new Consumer<String>() {
        @Override
        public void accept(String t) {
            System.out.println(t);
        }
    };
    con.accept("谎言和实验");
    System.out.println("--------------");
    Consumer<String> con1=(String s) -> {
        System.out.println(s);
    } ;
    con1.accept("lambda需要一个参数,但是没有返回值。");

}
	

//语法格式3:数据类型可以省略,因为编译器可以推断出,称为“类型推断”

//语法格式3:数据类型可以省略,因为编译器可以推断出,称为“类型推断”
@Test
public void test4() {
    System.out.println("--------------");
    Consumer<String> con4=( s) -> {
        System.out.println(s);
    } ;
    con4.accept("数据类型可以省略");

    ArrayList<String> list=new ArrayList<>();//类型推断
    int[] arr= {1,2,3};
}

语法格式四:lambda若只需要一个参数,参数的小括号可以省略

//语法格式四:lambda若只需要一个参数,参数的小括号可以省略
@Test
public void Test5() {
    System.out.println("--------------");
    Consumer<String> con1=(s) -> {
        System.out.println(s);
    } ;
    con1.accept("lambda若只需要一个参数,参数的小括号可以省略");
    System.out.println("-");
    Consumer<String> con2= s -> {
        System.out.println(s);
    } ;
    con2.accept("lambda若只需要一个参数,参数的小括号可以省略");
}

语法格式5:需要两个以上参数,多条执行语句,并且可以有返回值。

//语法格式5:需要两个以上参数,多条执行语句,并且可以有返回值。
	
@Test
public void test2() {
    Comparator<Integer> com1=new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        }
    };
    int compare1=com1.compare(12, 21);
    System.out.println(compare1);

    System.out.println("*-------------------------");

    Comparator<Integer> com2=(o1,o2) -> Integer.compare(o1, o2);//lambda表达式写法
    int compare2=com2.compare(32, 21);
    System.out.println(compare2);

    System.out.println("*-------------------------");
    Comparator<Integer> com3=Integer::compare;  //方法引用
    int compare3=com3.compare(32, 21);
    System.out.println(compare3);

}

语法格式6:当lambda只有一条语句时,return与大括号若有,都可省略

//语法格式6:当lambda只有一条语句时,return与大括号若有,都可省略
@Test
public void Test7() {
    Comparator<Integer> com1=(o1,o2) ->{
        return o1.compareTo(o2);
    };
    System.out.println(com1.compare(12, 6));
    System.out.println("-----*-*-*-----------");
    Comparator<Integer> com2=(o1,o2) -> o1.compareTo(o2);   //省略

    System.out.println(com2.compare(12, 6));
}

java内置4大核心函数式接口

  • 消费型接口 Consumer void accept(T t)
  • 供给型接口 Supplier T get()
  • 函数型接口 Function<T`,R> R apply(T t)
  • 断定型接口 Predicate boolean test(T t)

1.消费型接口,有形参,无返回值

@Test
public void test1() {
    happyTime(500, new Consumer<Double>() {

        @Override
        public void accept(Double t) {
            System.out.println("学习太累,去天上人间买水,价格:"+t);
        }
    });
    System.out.println("************************");

    happyTime(400, money -> System.out.println("玩太累,再去lambda天上人间买可乐,价格:"+money));
}
public void happyTime(double money,Consumer<Double> con) {
    con.accept(money);
}

2.断定型接口 Predicate boolean test(T t)

@Test
public void test2() {
    List<String> list=Arrays.asList("北京","南京","天津","东京","西京","普京");
    List<String> filterStrs=filterString(list, new Predicate<String>() {
        @Override
        public boolean test(String t) {
            return t.contains("京");
        }
    });
    System.out.println(filterStrs);
    System.out.println("************************");
    List<String> filterStrs1=filterString(list,s -> s.contains("京"));  //lambda表达式
    System.out.println(filterStrs1);

}
//根据给定的规则,过滤集合中的字符串。此规则由Predicate的方法决定
public List<String> filterString(List<String> list,Predicate<String> pre) {
    ArrayList<String> filterList=new ArrayList<>();
    for(String s:list) {
        if(pre.test(s)) {
            filterList.add(s);
        }
    }
    return filterList;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值