[英]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.