JDK8——函数式编程

核心函数接口

接口参数返回类型描述
PredicateTboolean用于判别一个对象。比如求一个人是否为男性
ConsumerTvoid用于接收一个对象进行处理但没有返回,比如接收一个人并打印他的名字
FunctionTR转换一个对象为不同类型的对象
SupplierNoneT提供一个对象
UnaryOperatorTT接收对象并返回同类型的对象
BinaryOperator(T, T)T接收两个同类型的对象,并返回一个原类型对象

常用函数式接口

Predicate

Predicate为函数式接口,predicate的中文意思是“断定”,意为判断某个东西是否满足某种条件;因此它包含test方法,根据输入值来做逻辑判断,其结果为True或者False,可以用作过滤对象

/**
 * Predicate测试
 */
private static void predicateTest() {
    Predicate<String> p = o -> o.equals("test");
    Predicate<String> g = o -> o.startsWith("t");

    /**
     * negate: 用于对原来的Predicate做取反处理;
     * 如当调用p.test("test")为True时,调用p.negate().test("test")就会是False;
     */
    Assert.assertFalse(p.negate().test("test"));

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

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

Consumer

顾名思义,Consumer的意思就是消费,即针对某个东西我们来使用它,因此它包含一个有形参无返回值的accept接口方法。
除了accept方法,还包含andThen这个方法,可以连续调用多个Consumer

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

    //执行f2之后,连续执行两次f2的Accept方法
    f2.andThen(f1).andThen(f1).accept("test1");
}

Function

Function也是一个函数式编程接口;它代表的含义是“函数”,而函数经常是有输入输出的,因此它含有一个apply方法,包含一个入参与一个返回值,可以用作装箱或者拆箱某个对象

/**
 * Function测试
 */
public static void functionTest() {
    Function<Integer, Integer> f = s -> s++;
    Function<Integer, Integer> g = s -> s * 2;

    /**
     * 下面表示在执行F时,先执行G,并且执行F时使用G的输出当作输入。
     * 相当于以下代码:
     * Integer a = g.apply(1);
     * System.out.println(f.apply(a));
     */
    System.out.println(f.compose(g).apply(1));

    /**
     * 表示执行F的Apply后使用其返回的值当作输入再执行G的Apply;
     * 相当于以下代码
     * Integer a = f.apply(1);
     * System.out.println(g.apply(a));
     */
    System.out.println(f.andThen(g).apply(1));

    /**
     * identity方法会返回一个不进行任何处理的Function,即输出与输入值相等; 
     */
    System.out.println(Function.identity().apply("a"));
}

Supplier

Supplier 代表的含义是“提供者”,因此它含有一个get方法,没有入参只能输出

Supplier<String> supplier = () -> "Test supplier";
supplier.get();

UnaryOperator

一元操作符,UnaryOperator继承于java.util.function.Function。UnaryOperator接收一个T类型参数,并返回T类型的参数

UnaryOperator<String> ddb = x -> x + 1;
System.out.println(ddb.apply("abc"));// abc1

BinaryOperator

二元操作符,BinaryOperator接口用于执行lambda表达式,接受两个T类型的参数并返回一个T类型的返回值。BinaryOperator中有两个静态方法,是用于比较两个数字或字符串的大小
minBy()获取更小的值,maxBy()获取更大的值。示例如下:

BinaryOperator<Integer> add = (n1, n2) -> n1 + n2;
System.out.println(add.apply(1, 2)); //3
System.out.println(BinaryOperator.maxBy(Integer::compareTo).apply(1,2));//2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值