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

Rob*_*upp 12 java string if-statement compare

我知道这是一个非常基本的问题,但我总是想方设法让我的代码尽可能简洁明了.有没有办法比较一个if()语句中三个或更多字符串的相等性?我目前正在使用&&运算符逐步比较每个字符串.但是,正如您可以想象的那样,在调用长变量名和方法之间,这些if()语句会非常快速地混乱.另外,我计划使用未知数量的这些字符串,并且希望避免复杂的for循环,其中if()嵌套了混乱的字符串.这是我的代码目前的样子:

String a = new String("a");
String b = new String("b");
String c = new String("c");
if(a.equals(b) && b.equals(c)) {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

有没有办法,或者我可以使用某种类型的集合,这样我就可以比较这些值:

if(a.equals(b).equals(c)) {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*imo 16

没有简单的方法可以equals()像这样链接你的命令.为了能够以这种方式链接它们,equals()必须返回对String本身的引用.然而,然而,它不能返回表示比较结果的布尔值.

另外,我认为在第一个例子中分别比较三个字符串并不是特别有问题.确保您的代码格式良好,即使对于较长的变量名称,它仍然易于理解:

if(myValueAWithALongName.equals(myValueBWithALongName) &&
   myValueBWithALongName.equals(myValueCWithALongName) &&
   myValueCWithALongName.equals(myValueDWithALongName) &&
   ... ) {
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用此线程中提出的其他解决方案之一,并将您的值包装到Collection中并编写辅助方法.但请注意,这可能会对内存使用情况,性能和可能的可读性产生负面影响.


另外,您不应该使用构造函数创建字符串new String().只需将字符串文字直接分配给您的变量:

String a = "a";
Run Code Online (Sandbox Code Playgroud)


Tag*_*eev 14

如果您有多个相同类型的对象,最好将它们组织在数组结构中,如数组或列表.因此,假设你有一个ListString对象:

List<String> strings = Arrays.asList("a", "b", "a", ...);
Run Code Online (Sandbox Code Playgroud)

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

if(new HashSet<>(strings).size() == 1) {
    // all strings are equal
}
Run Code Online (Sandbox Code Playgroud)

@niceguy提出了更长但更优的解决方案.如果您使用的是Java-8,也可以这样做:

if(strings.stream().distinct().count() == 1) {
    // all strings are equal
}
Run Code Online (Sandbox Code Playgroud)