我必须使用一种方法来调用一个以“”作为连接字符串a和b的参数的连接器,我必须检查两侧是否为空(“”)。 两个代码都有效,但我不明白为什么我的审阅者希望我按照他的方式来做。如果有人可以向我解释它的好处,那就太好了。
我的方法。
public static String join(String a, String b) {
StringJoiner sj = new StringJoiner(" ");
if (a.endsWith("dieci") || a.endsWith("veinti")) {
return a + b;
}
if (a.equals("")) {
return b;
}
if (b.contentEquals("")) {
return a;
}
sj.add(a);
sj.add(b);
return sj.toString();
}
他的方法。
public static String join(String a, String b) {
if (a.endsWith("dieci") || a.endsWith("veinti")) {
return a + b;
}
return Stream.of(a, b).filter(s ->!s.isEmpty()).collect(Collectors.joining(" "));
}
最佳答案
他的要简单得多;在一行中,它基本上说:
Take Strings a and b, get rid of the empty ones, and join the remaining ones with spaces, returning the result.
这样可以很清楚地看出代码的意图。它还可以防止错误,因为在分散的代码中更容易出现拼写错误或逻辑错误,从而将实现分解为多种不同的情况。
诚然,这可能比您的代码更难理解,因为初学者可能不会理解流。但是一旦你理解了它们,它肯定更容易阅读(至少在这种情况下,但并非总是如此),并且它使得编写此类方法变得更加容易。因此,最好现在就学习此类 Java 结构并使用它们,而不是以后再使用。
他的代码也更加灵活。如果您必须使该方法连接三个字符串,则对其方法的唯一修改就是更改 Stream.of(a, b)
至Stream.of(a, b, c)
。您的方法需要进行更多更改。
此外,使用isEmpty()
比 .equals("")
更清晰因为它用更自然的英语术语说明了您正在做的事情。这又可以防止拼写错误,因为您可能会意外地这样做 .equals(" ")
(带空格)或其他东西。
另外,为什么使用两种不同的方法( equals
和 contentEquals
)来做同样的事情?这很令人困惑。他的方法并没有做到这一点。
关于java - 这与方法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56300739/