编程技术文章分享与教程

网站首页 > 技术文章 正文

java 函数式编程(java函数式编程有必要吗)

hmc789 2024-11-16 20:56:38 技术文章 2 ℃

Java8的新引入,包含函数式的设计,接口都有@FunctionalInterface的注解,函数式接口,有且仅有一个抽象方法。

Java SE 8中增加了一个新的包:java.util.function,它里面包含了常用的函数式接口,例如:

  • Predicate<T>——接收 T 并返回 boolean
  • Consumer<T>——接收 T,不返回值
  • Function<T, R>——接收 T,返回 R
  • Supplier<T>——提供 T 对象(例如工厂),不接收值
  • UnaryOperator<T>——接收 T 对象,返回 T
  • BinaryOperator<T>——接收两个 T,返回 T
import java.util.function.*;

/**
 *  函数式接口测试
 */
public class FunctionDemo {
    public static void main(String[] args) {

        //断言 用作条件判断
        Predicate<String> predicate = (s) ->  s.equals("1024")  ;
        System.out.println( predicate.test("1024") );
        //以上结果返回true

        //消费者
        Consumer<String> consumer = (c) -> System.out.println( c );
        consumer.accept( "1024" );
        // 有参数,没有返回值

        //可以进行计算,并返回结果
        Function<Integer,Integer> function = (i) ->  i*i ;
        System.out.println( function.apply( 8 ) );
        //返回计算的结果为64

        //生产者
        Supplier<String> supplier = () -> "1024" ;
        System.out.println( supplier.get() );
        //返回预设值的1024值, 与工厂模式很类似

        //运算
        BinaryOperator<Integer> binaryOperator = (i,j)-> i+j ;
        System.out.println(  binaryOperator.apply( 8, 8 ) );
        //以上的运算的结果为16
    }
}

Java 8 采用函数式接口作为Lambda 表达式的目标类型。函数式接口(Functional Interface)是一个有且仅有一个抽象方法声明的接口。任意只包含一个抽象方法的接口,我们都可以用来做成Lambda表达式。每个与之对应的lambda表达式必须要与抽象方法的声明相匹配。函数式接口与其他普通接口的区别:

  • 函数式接口中只能有一个抽象方法
  • 接口中唯一抽象方法的命名并不重要,因为函数式接口就是对某一行为进行抽象,主要目的就是支持 Lambda 表达式
  • 自定义函数式接口时,应当在接口前加上@FunctionalInterface标注(虽然不加也不会有错误)。编译器会注意到这个标注,如果你的接口中定义了第二个抽象方法的话,编译器会抛出异常。


标签列表
最新留言