繁体   English   中英

什么是Java最适合Javascript的OR?

[英]What is the Java's best equivalent to Javascript's OR?

在Javascript中,我可以执行以下操作,根据分配中各自的出现顺序获取值。

var myString = source1 || source2 || source3 || source4 || source5;

如果任何源具有值,则将其分配给myString。 如果所有来源都有价值,那么它将占据第一个。

在Java中, java.util.Optional似乎仅限于Optional.of("value").orElse( "another" )并且它不能再链接,因为orElse()的返回已经是一个字符串。

我可能会使用一些简单的东西:

public static <T> T first(T... values) {
    for (T v : values) {
        if (v != null) return v;
    }
    return null;
}

虽然可以说有很多方法,但我更喜欢以下方法:

Integer i = Stream.of(null, null, null, null, null, null, null, null, 1, 2)
                  .filter(Objects::nonNull) // filter out null's
                  .findFirst().orElse(10); // default to 10
// Objects::nonNull is same as e -> e != null
System.out.println(i);

只是发布一个非流替换流api

如果你只想要非常小的字符串集与非空值进行比较,你可能希望节省初始化流,lambdas等的开销。发生在幕后的事情。

您可以使用三个点...来表示“任意数量的参数”,这些参数将在您的方法中有效地转换为String[] arguments

然后迭代它们并将它们与您的自定义比较函数进行比较。 在这种情况下,我选择使用非空字符串模拟javascript而不是空字符串。 根据需要修改。

public String sourceFilter(String... input) {
    for(String test : input) {
        if(test != null && !test.isEmpty()) {
            return test;
        }
    }
    return "";
}

我不知道什么是收支平衡点,在这种情况下,流更有效,但我想这将是一个相当高的数字来覆盖它的初始化成本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM