比较具有多个值的字符串
我想在 Ireport 中用 java 添加以下条件:
Field.equals("red" or "bleu" or "black" or "....") ? "yes" : "no"
我必须使用吗
Field.equals("..")||$F{color}.equals("..")
我有一个很长的清单。有没有其他的表达方式?
回答
方法#1:
private static final HashSet<String> colors = new HashSet<>(
Arrays.asList("red", "blue", "black", "sky-blue pink"));
res = (colors.contains(field)) ? "yes" : "no";
方法#2(Java 7 及更高版本)
switch (field) {
case "red": case "blue": case "black": case "sky-blue pink":
res = "yes";
break;
default:
res = "no";
}
方法 #3(Java 12 或更高版本)
res = switch (field) {
case "red", "blue", "black", "sky-blue pink" -> "yes";
default -> "no";
};
这三种方法的性能应该差不多。在幕后,字符串 switch 语句和 switch 表达式通常会使用 static 的等效项HashMap从field值映射到值或跳转地址。但是,如果性能对您来说真的很重要,请在您的应用程序上下文中对替代方案进行基准测试(在分析之后等)。
在我看来,最后一种方法是最好的……如果您可以自由使用 Java 12+。第一种方法可能具有的优点是字符串列表不需要硬连接到您的代码库中。