Lambda表达式(4)|(函数式接口)

Lambda表达式(4)|(函数式接口)


前言

Lambda表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理:函数式开发者非常熟悉这些概念

一、什么是函数式接口

函数式接口(Functional Interface)就是有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为 lambda 表达式。函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。

1.函数式接口格式

//格式:
public interface Converter{
    
    
void convert();
}
//对于是否是函数式接口,java8中也提供了一个专用的注解:@FunctionalInterface。通过这个注解,可以确定是否是函数式接口
//示例:
@FunctionalInterface
public interface Converter<S, T> {
    
    
    @Nullable
    T convert(S var1);
}

二、Lambda表达式语法及使用

1.语法介绍

Lambda 表达式的基础语法 : Java8 中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 Lambda 表达式拆分成两部分 :
左侧 : Lambda 表达式的参数列表
右侧 : Lambda 表达式中所需执行的功能, 即 Lambda 体

    Comparator com = (x, y) -> {
    
    
        System.out.println("函数式接口");
        return Integer.compare(x, y);
    };

2.替代匿名内部类

匿名内部类用法

    public void oldRunable() {
    
    
        new Thread(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                System.out.println("Myrunable is using!");
            }
        }).start();
    }

使用lambda表达式

    public void runable() {
    
    
        new Thread(() -> System.out.println("It's a lambda function!")).start();
    }

3.集合进行迭代

匿名内部类用法

    default void forEach(Consumer<? super T> action) {
    
    
        Objects.requireNonNull(action);
        Iterator var2 = this.iterator();
        while (var2.hasNext()) {
    
    
            T t = var2.next();
            action.accept(t);
        }
    }

总结

以上就是Java8新特性函数式开发的一些相关特性,希望对大家有帮助

猜你喜欢

转载自blog.csdn.net/Oaklkm/article/details/133680362