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具有了动态语言的能力。