java8新特性

视频链接:03_lambda表达式初步与函数式接口_哔哩哔哩_bilibili

 lambda表达式的基本结构:

(parm1,parm2,parm3) -> {

}

函数式接口:

1.如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口。

2.如果在某个接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的定义要求该接口。

3.如果某个接口只有一个抽象方法,但我们并没有给该接口声明FunctionalInterface注解,那么编译器依旧会将该接口看做是函数式接口。

java8新特性_第1张图片

 1.使用lambda表达式 简化遍历:

 java8新特性_第2张图片java8新特性_第3张图片

2.使用方法引用 ,简化遍历:

java8新特性_第4张图片

在java中,lambda表达式是对象,他们必须依附于函数式接口。

倒序排序:

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class StringComparator {
    public static void main(String[] args) {
        List names = Arrays.asList("zhangsan", "lisi", "wangwu");
//        Collections.sort(names, new Comparator() {
//            @Override
//            public int compare(String o1, String o2) {
//                return o2.compareTo(o1);//倒序
//            }
//        });

//        Collections.sort(names, (o1, o2) -> {return o2.compareTo(o1);});
//        System.out.println(names);

//        Collections.sort(names, Comparator.reverseOrder());
//        System.out.println(names);

        Collections.sort(names, (o1, o2) -> o2.compareTo(o1));
        System.out.println(names);

    }
}

java8新特性_第5张图片

java8新特性_第6张图片

Stream

为了简化代码,使用流Stream

 也可以换一种 方法引用的形式

-------------------------------------------------------------8.22-----------------------------------------------------------

多个function串联:

例子:function中的compose方法和andThen方法的区别:

compose方法先执行后面的(function2),andThen先执行前面的(function1)

java8新特性_第7张图片

 BiFunction:接受两个参数,返回一个结果。

eg:使用BiFunction实现加减乘除 

java8新特性_第8张图片

 eg2:使用BiFunction的andThen方法(注意后面是function,而不是BiFunction,这是因为参数个数的问题,BiFunction没有compose方法也是这个原因,返回一个参数不足以供给两个参数的BiFunction)

 输出结果:25

java8新特性_第9张图片

eg:stream在实际中的应用

java8新特性_第10张图片

 例2java8新特性_第11张图片

 更灵活的方法:

java8新特性_第12张图片

 ---------------------------------------------------------------------

 

你可能感兴趣的:(javaSE基础,java,开发语言)