检查 Java 中三个或更多字符串的相等性

2022-09-03 16:57:41

我知道这是一个非常基本的问题,但我一直在努力寻找使我的代码尽可能干净简洁的方法。有没有办法比较单个语句中三个或更多字符串的相等性?我目前正在使用运算符逐步比较每个字符串。但是,正如您可以想象的那样,在长变量名称和被调用的方法之间,这些语句很快就会变得非常混乱。此外,我计划拥有未知数量的这些字符串,并希望避免嵌套在其中的杂乱s的复杂循环。这是我的代码当前的样子:if()&&if()forif()

String a = new String("a");
String b = new String("b");
String c = new String("c");
if(a.equals(b) && b.equals(c)) {
    doSomething();
}

有没有一种方法,或者某种集合,我可以使用,可以让我比较这些值,更像这样:

if(a.equals(b).equals(c)) {
    doSomething();
}

答案 1

没有简单的方法可以像这样链接命令。为了能够以这种方式链接它们,必须返回对字符串本身的引用。但是,它不能再返回表示比较结果的布尔值。equals()equals()

另外,我认为像第一个示例中那样单独比较三个字符串并不是特别成问题。确保代码格式正确,并且即使对于较长的变量名称,它仍将易于理解:

if(myValueAWithALongName.equals(myValueBWithALongName) &&
   myValueBWithALongName.equals(myValueCWithALongName) &&
   myValueCWithALongName.equals(myValueDWithALongName) &&
   ... ) {

或者,您可以使用此线程中建议的其他解决方案之一,并将值包装到集合中并编写帮助器方法。但请注意,这可能会对内存使用率、性能和可能的可读性产生负面影响。


顺便说一句,您永远不应该使用 构造函数 创建字符串 。只需将字符串文本直接分配给变量:new String()

String a = "a";

答案 2

如果您有多个相同类型的对象,最好将它们组织在数据结构(如数组或列表)中。所以假设你有一个对象:ListString

List<String> strings = Arrays.asList("a", "b", "a", ...);

您想知道列表中的所有字符串是否彼此相等。这可以通过多种方法完成。可能最短的一个是:

if(new HashSet<>(strings).size() == 1) {
    // all strings are equal
}

@niceguy提出了更长但更优化的解决方案。如果您使用的是 Java-8,也可以按以下方式操作:

if(strings.stream().distinct().count() == 1) {
    // all strings are equal
}