java8(lambda)-方法引用-3

/*
 * 文件名:TestLambda
 * 版权:Copyright by 启海云仓 qihaiyun.com
 * 描述:
 * 创建人:Administrator
 * 创建时间:2019/9/23
 * 修改理由:
 * 修改内容:
 */
package lambda_1.lambda语法_1;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * 〈一句话简述该类/接口的功能〉
 * 〈功能详细描述〉
 *
 * @author Administrator
 * @version 1.0
 * @see TestLambda
 * @since JDK1.8
 */
public class TestLambda {

/*
一、Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符
作用:为函数式接口的抽象方法实现方法体(编写方法执行体)

箭头操作符将 Lambda 表达式拆分成两部分:
左侧:Lambda 表达式的参数列表
右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体

语法格式一:无参数,无返回值

语法格式二:有一个参数,并且无返回值

语法格式三:若只有一个参数,小括号可以省略不写

语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句

语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写

语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”


二、Lambda 表达式需要“函数式接口”的支持
函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解 @FunctionalInterface 修饰
可以检查是否是函数式接口

*/

    /*
    -----------------------------------------------------------------------------语法格式一:无参数,无返回值
    */
    @Test
    public void test1(){
        Runnable r = ()-> System.out.println("1");
    }

    /*
    -----------------------------------------------------------------------------语法格式二:有一个参数,并且无返回值
                                                                                                    语法格式三:若只有一个参数,小括号可以省略不写
    */
    @Test
    public void test2(){
        Consumer<String> c = s -> System.out.println("1");
    }

    /*
    -----------------------------------------------------------------------------语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句,必须加()和{}
    */
    @Test
    public void test3(){
        Comparator<String> comparator = (s1,s2)-> {
            if(s1.equals(s2)){
                return 0;
            }else if(!s1.equals(s2)){
                return -1;
            }else {
                return 0;
            }
        };
    }

    /*
    -----------------------------------------------------------------------------语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写
    */
    @Test
    public void test4(){
        Comparator<Integer> comparator = (x,y)->Integer.compare(x,y);
    }

    /*
    -----------------------------------------------------------------------------语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
    */

    @Test
    public void test5(){
        List<String> list = new ArrayList<>();
        Predicate<String> p = str-> str.length()>1;
        List<String> list1 = new ArrayList<>();
        list.forEach(s1->{
            if(p.test(s1)){
                list1.add(s1);
            }
        });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值