Java8 中的引入的Supplier,Predicate主要应用在哪里?

Java8 中的引入的Supplier,Predicate主要应用在哪里?能否举个实际应用的例子来说明一下,谢谢

阅读 5.9k
2 个回答

主要用在函数式编程里面,也可用于其他任何合适的地方,目的是将函数(lambda)作为变量来传递。

至于例子,网上一搜一大把。

举一个java8实战中的例子吧
java8引入了一个对log方法的重载版本,这个版本的log方法接受一个Supplier作为参数。这个替代版本的log方法的函数签名如下:

public void log(Level level, Supplier<String> msgSupplier)

你可以通过下面的方式对它进行调用:

logger.log(Level.FINER, () -> "Problem: " + generateDiagnostic());

如果日志器的级别设置恰当, log 方法会在内部执行作为参数传递进来的Lambda表达式。这
里介绍的 Log 方法的内部实现如下:

public void log(Level level, Supplier<String> msgSupplier){
    if(logger.isLoggable(level)){
        log(level, msgSupplier.get());
    }
}

如果你发现你需要频繁地从客户端代码去查询一个对象的状态(比如前文例子中的日志器的状态),只是为了传递参数、调用该对象的一个方法(比如输出一条日志),那么可以考虑实现一个新的方法,以Lambda或者方法表达式作为参数,新方法在检查完该对象的状态之后才调用原来的方法.你的代码会因此而变得更易读(结构更清晰),封装性更好(对象的状态也不会暴露给客户端代码了).

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题