当前位置:  开发笔记 > 编程语言 > 正文

Java 8 Boolean.logicalOr方法

如何解决《Java8Boolean.logicalOr方法》经验,为你挑选了2个好方法。

在Java 8中,Boolean添加了类中的新方法.

我们来谈谈其中一个

public static boolean Boolean.logicalOr(boolean a , boolean b)

现在,我的问题是,他们为什么需要?

以下两种情况之间有什么区别.

boolean result = a || b; 要么 Boolean result = Boolean.logicalOr(a,b);

什么是如此特别Boolean.logicalOr(),何时我更喜欢一个而不是另一个.



1> Roland..:

主要是那些方法是为了您的方便,并通过使用lambdas/streams中的方法引用使代码更具可读性.我们来看一个例子:

Stream.of(/* .. some objects .. */)
      .map(/* some function that returns a boolean */)
      .reduce(Boolean::logicalOr);

试着写这个a || b:

Stream.of(...)
      .map(...)
      .reduce((a, b) -> a || b); // logicalOr is actually using ||

不那么可读,对吧?

正如Sotirios Delimanolis在评论中所述,您可能还想查看javadoc并关注@see BinaryOperator.或者看看函数包摘要javadoc.


IMO的第二个版本即使不是更多,也是可读的.
好吧它失去了某种类型检查...:P如果我们不小心将它改为整数,```仍然可以正常工作而不抱怨,而`||`将不会通过编译

2> Sebastian..:

它与方法引用有关.像这样你也可以||在lambdas中使用(逻辑或)运算符.

以这种方式还有其他新功能,如Objects.isNull等.

使用函数引用而不是lambda表达式(a,b) -> a || b更符合stream和lambda'look-and-feel'.
此外,方法引用将产生较少的字节代码,因此意味着更快的执行时间(至少一点).


值得注意的是,因为它是一个方法调用,所以你会失去`||`的短路行为.
@Kevin:只有你直接调用它才有意义,这无论如何都不是预期的用例(正如这个答案所解释的那样).如果从中创建函数,则`Boolean :: logicalOr`和`(a,b) - > a || b`之间没有区别,因为评估函数总是意味着在执行代码之前评估所有参数.
`方法引用将产生更少的字节代码,因此意味着更快的执行时间.更小的.class文件,也许; 但是一旦字节代码被JIT编译成汇编代码,原始字节代码就越大或越小意味着什么都没有:执行速度.
@walen真实; 需要基准来确定执行速度.塞巴斯蒂安,我鼓励你这样做.我的发现是显式lambda比方法引用略快,但与使用int而不是Booleans的简单流减少相比,拳击开销占主导地位.
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有