zoukankan      html  css  js  c++  java
  • java8学习之BiFunction函数式接口实例演示&Predicate函数式接口详解

    BiFunction函数式接口:

    在上次中已经对BiFunction接口进行了初步的认识,这里对它进一步学习,这里打算新建一个Person实体,然后新建若干个Person的实例存放在集合中,最后再根据若干条件来从集合中挑选满足指定条件的元素,下面开始:

    然后新建几个Person对象存放在集合元素中:

    接下来从集合中查找满足指定条件的元素,当然这里不采用传统的方式去做,而是采用函数式风格的方式来实现,这里采用Stream的方式进行过滤,关于Stream之后会系统的进一步学习的,这里先有个感知既可:

    首先是根据条件过滤:

    那Predicate长啥样?

    很明显可以用作生成条件,不过这个接口在下面会专门学习的,这里先用一下它:

    过滤完之后,接下来则需要生成一个集合,这里采用如下方式既可:

    可见用函数式的方式代码的可读性也比传统的方式要好,下面调用一下它:

    接下来咱们根据年龄进行相应的条件查询,先定义一个方法:

    在正式实现时,思考一下:明显是两个输入参数,最终返回结果是一个,这不是明显符合咱们上次学习的BiFunction的特性么?所以这次采用BiFunction来实现:

    从上面的条件来看是从集合中找出大于指定年龄的元素,不过对于有段代码可以简化一下,IDE也已经识别出来为灰色了:

    所以优化一下为:

    接着调用一下:

    接下来再进一步,这次将BiFunction作为方法的行为由调用者来提供,如下:

    从这个方法定义来看完全不知道具体行为,也就是不知道如何来根据年龄进行元素过滤,是大于,是小于,完全不知,这时是由调用者来去指定的,如下:

    此时就变得非常灵活了,如果此时的过滤条件发生变化了:由之前的大于指定年龄变为小于指定年龄了,这时我们的过滤方法是不用变化的,只需要在调用时更改过滤条件既可,如下:

    再一次体现了函数式传递行为的魅力~~

    Predicate函数式接口:

    在上面的例子中已经涉及到了Predicate函数式接口了,接下来仔细再来学习一下它,先来读一下它的javaDoc:

    所以说从这个函数的形态来看,最适合就是定义那些条件相关的东东了,下面简单使用一下它:

    这个接口在未来Steam中会大量使用到,其中在上面对集合元素进行过滤中就已经使用到了。

  • 相关阅读:
    文件上传和多线程通信
    黏包
    socket通信
    osi七层协议
    面向对象的反射和双下方法
    类的成员和异常处理
    python面向对象类的约束和设计的统一化规范
    单继承和多继承
    对象
    Python-----带参数的装饰器以及补充
  • 原文地址:https://www.cnblogs.com/webor2006/p/8214596.html
Copyright © 2011-2022 走看看