Java 8 条件 .map() (或带有恒等函数的映射)

标签 java functional-programming java-8 option-type

假设我们有 boolean 标志来打开/关闭流中的 map 。例如是否修剪。

下面的示例是正确的解决方案还是有更好的方法来实现?

boolean doTrim = true;
optionalValue.map(doTrim ? String::trim : (x) -> x ).get()...

或者:

boolean doTrim = true;
optionalValue.map(doTrim ? String::trim : Function.identity() ).get()...

最佳答案

你把事情搞得太复杂了。如果您有Optional<String> optionalValue你可以简单地说:

if(doTrim) optionalValue=optionalValue.map(String::trim);

然后继续,例如调用get就在上面。

但是如果您调用get()无条件地就像你的例子一样,你必须相信 Optional不是,可选,但是存在。如果您知道 String存在,您可以做得更简单:

String s=optionalValue.get();
if(doTrim) s=s.trim();

如果您坚持将所有代码内联,当然可以这样写:

(doTrim? optionalValue: optionalValue.map(String::trim)).get()

(doTrim? optionalValue.get(): optionalValue.get().trim())

但与普通的if相比并没有真正的优势在此声明。如果您有一个真正的可选值,不知道是否 String在场,但不想调用 get立即,我会推荐我的答案的第一个版本,因为它允许继续Optional以任何你喜欢的方式。您可以在 String::trim 之间进行选择恒等函数可能看起来更时髦,但与传统编程相比并没有真正的优势。

关于Java 8 条件 .map() (或带有恒等函数的映射),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27315959/

相关文章:

java - 如何在 Camel route 使用java boolean 条件?

java - 将十六进制字符串转换为整数

java - 安卓/Java : Is my code correct?

java - Android - 在WebView中显示本地镜像

javascript - JS 使用部分参数化函数

haskell - 如何将变量保存为字节串?

java - BinaryOperator 的身份

Java 8 流和过滤器在列表中不起作用

java - 从 jar 文件访问文件和图像

dictionary - 使用 java 8 Stream API 将一个映射转换为另一个映射