Java 8

Java 函数式编程 之Lambada 表达式

2019-04-07  本文已影响0人  e86dab508bc1

java8 中引入了函数式编程,带来了新的编程思维的转变,命令式编程得到了补充,相比较于市面上众多的函数式编程语言来说,java 在原有的编程模式下面,为其注入了新的血液,使得语言拓展能力大大的提高,下面就简单写个例子来看看函数式编程与命令式编程之间的区别。

例子 : 找出给定的list中的偶数

  List<Integer> integers = Lists.newArrayList(1,2,3,4,5,6);

    //命令式
    for(Integer integer : integers){
        if (integer % 2 ==0){
            System.out.println(integer);
        }
    }
    
    //Stream 函数式
    integers.stream().filter(x -> x % 2 ==0).forEach(System.out::println);

下面介绍几个基本的函数接口,在这之前,先看下函数接口的定义。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}

下面是几个基本的函数式接口,其他的很多复杂操作都是通过这些进行拓展的。

(1)数据的提供者, 只出不进。

    Supplier<Integer> supplier = () -> ThreadLocalRandom.current().nextInt();
    System.out.println(supplier.get());

(2)数据的消费者, 只进不出

    Consumer<Integer> consumer = (Integer x) -> {
        System.out.println(x);
    };
    consumer.accept(5);

(3)数据处理并返回,有进有出。

    Function<Integer, Integer> function = integer -> {
        return 100;
    };

    System.out.println(function.apply(99));

(4)判断,返回 true或者false。

    Predicate<Integer> integerPredicate = x -> {
        if (x > 23) {
            return false;
        } else {
            return true;
        }
    };

现在在集合类中也是很多地方使用到了函数式接口,java 使用了default关键字,使得原有的实现类可以不需要实现新的添加的方法,还有就是java添加的 invokedynamic 指令,使得java具有了动态语言的能力。

上一篇 下一篇

猜你喜欢

热点阅读