java8--lambda

java8--lambda

一、lambda概述

1、函数式接口:接口中只有一个需要被实现的抽象函数

2、函数式接口注解:@FunctionalInterface 表示这个接口是一个函数式接口。为了避免后来的人在接口中增加新的接口函数,导致其有多个接口函数需要被实现,变成非函数式接口。

3、lambda表达式本质是匿名方法

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

二、lambda表达式语法

2.1、lambda表达式结构

Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 “ ->”,该操作符被称为 Lambda 操作符或

箭头操作符。

它将 Lambda 分为两个部分:

左侧: 指定了 Lambda 表达式需要的方法参数列表

右侧: 指定了 Lambda 体,即 Lambda 表达式要执行的功能。

2.2、lambda表达式使用说明

(1)一个 Lambda 表达式可以有零个或多个参数,参数的类型既可以明确声明,也可以根据上下文来推断

(2)圆括号内,方法参数列表之间用逗号相隔

(3)当只有一个参数,且其类型可推导时,圆括号()可省略

(4)Lambda 表达式的主体可包含零条或多条语句,如果 Lambda 表达式的主体只有一条语句,花括号{}可省略,如果有返回值,return也可以省略。匿名函数的返回类型与该主体表达式一致

(5)如果 Lambda 表达式的主体包含一条以上语句,则表达式必须包含在花括号{}中(形成代码块)。匿名函数的返回类型与

代码块的返回类型一致,若没有返回则为空

三、lambda表达式使用实例


import org.junit.Test;
import org.omg.CORBA.CODESET_INCOMPATIBLE;

import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.util.Comparator;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

public class Demo1{

    @Test
    public void testConsumer(){
//        原始写法
        Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
//        lambda第一种写法
        Consumer<String> consumer1 = s -> System.out.println(s);
//        lambda第二种写法
        Consumer<String> consumer2 = System.out::println;

//        调用lambda函数式编程的方法
        consumer2.accept("helle");
    }
    @Test
    public void test2(){
//        原始写法
        Supplier<String> supplier = new Supplier<String>() {
            @Override
            public String get() {
                return "Hello";
            }
        };
//        lambda写法
        Supplier<String> supplier1 = ()->"hello";
//        调用lambda函数式编程的方法
        supplier1.get();
    }
    @Test
    public void test3() {
        //        原始写法
        Function<String, Integer> func = new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                return s.length();
            }
        };
//        第一种lambda写法
        Function<String,Integer> func2 = s -> s.length();
//        第二种lambda写法
        Function<String,Integer> fun3 = String::length;
    }
    @Test
    public void test4(){
//        原始写法
        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);
            }
        };
//        lambda第一种写法
        Comparator<Integer> comparator1 = (o1,o2)-> Integer.compare(o1,o2);
//        lambda第二种写法
        Comparator<Integer> comparator2 = Integer::compare;
    }
    @Test
    public void test5(){
//        原始写法
        Comparator<String> comparator = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()>o2.length() ? 1:-1;
            }
        };
//        lambda写法
        Comparator<String> comparator1 = (str1,str2)-> str1.length()>str2.length()?1:-1;
    
    }

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值