Java8函数式编程

Java8新引入函数式编程方式,大大的提高了编码效率
在这里插入图片描述

函数式接口;它指的是有且只有一个未实现的方法的接口,一般通过FunctionalInterface这个注解来表明某个接口是一个函数式接口。函数式接口是Java支持函数式编程的基础。

四大函数式接口

1. Consumer

Consumer是一个函数式编程接口; 顾名思义,Consumer的意思就是消费,即针对某个东西我们来使用它,因此它包含有一个有输入而无输出的accept接口方法; 除此之外还有一个andThen方法

//定义
default Consumer<T> andThen(Consumer<? super T> after) {
    Objects.requireNonNull(after);
    return (T t) -> { accept(t); after.accept(t); };
}

可见这个方法就是指定在调用当前Consumer后是否还要调用其它的Consumer;

public static void consumerTest() {
    Consumer f = System.out::println;
    Consumer f2 = n -> System.out.println(n + "-F2");

    //执行完F后再执行F2的Accept方法
    f.andThen(f2).accept("test");

    //连续执行F的Accept方法
    f.andThen(f).andThen(f).andThen(f).accept("test1");
}

2. Function

Function也是一个函数式编程接口;它代表的含义是“函数”,而函数经常是有输入输出的,因此它含有一个apply方法,包含一个输入与一个输出;
除apply方法外,它还有compose与andThen及indentity三个方法,其使用见下述示例;

  // 2. Function
        Function<Integer, Integer> fx = s-> s*=4;
        Function<Integer, Integer> fy = s-> s+=2;
        System.out.println(Function.identity().apply("1231"));
        // 先执行fy,再执行apply;
        System.out.println(fx.compose(fy).apply(5));  //28
        // 先执行apply , 再执行fy
        System.out.println(fx.andThen(fy).apply(5));  // 22

3. Predicate

Predicate为函数式接口,predicate的中文意思是“断定”,即判断的意思,判断某个东西是否满足某种条件; 因此它包含test方法,根据输入值来做逻辑判断,其结果为True或者False。
它的使用方法示例如下:

 // 3 Predicate
        Predicate<String> p = o -> o.equals("test");
        Predicate<String> g = o -> o.startsWith("t");
        System.out.println(p.test("test"));
        /**
         * negate: 用于对原来的Predicate做取反处理;
         * 如当调用p.test("test")为True时,调用p.negate().test("test")就会是False;
         */
        System.out.println(p.negate().test("test"));

        /**
         * and: 针对同一输入值,多个Predicate均返回True时返回True,否则返回False;
         */
        System.out.println(p.and(g).test("test"));

        /**
         * or: 针对同一输入值,多个Predicate只要有一个返回True则返回True,否则返回False
         */
        System.out.println(p.or(g).test("ta"));

4. Supplier

// 供给型接口
 /**
* @name 供给型接口
 * @use Supplier<R>
 * @param R 返回值类型
 * @fun 无参数 有返回值
 * */
 Supplier<Date> supper = Date::new;
 Date date = supper.get();
 System.out.println(date);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值