我正在探索各种有效的方法来比较Java中的两个字符串,并且在下面的两个代码段中进行比较
方法1:-传统方式
public static boolean stringCheck(String test1, String test2) {
if ((test1 == null) || (test2 == null)) {
return false;
}
return test1.compareTo(test2) > 0;
}
并测试此代码
String test1 = null;
String test2 = null;
boolean isTrue1 = stringCheck(test1, test2);
System.out.println("Return of stringCheck is" + isTrue1);
它打印=> stringCheck返回为假 ,这是正确的
方法2:-使用Java 8功能
public static boolean stringCheckWithJava8(String test1, String test2) {
return Optional.ofNullable(test1)
.map(s1 -> s1.equals(test2))
.orElseGet(() -> test2 == null).booleanValue();
}
并测试此代码
String test1 = null;
String test2 = null;
boolean isTrue = stringCheckWithJava8(test1, test2);
打印=>返回stringCheckWithJava8为真 在逻辑上是正确的。
现在我的问题是,如何在方法2中使用上面显示的Java 8功能修改我的代码,以处理两个字符串均为null时返回false的问题?
答案 0 :(得分:1)
由于Java 8功能是一个抽象概念,并且包含Java 8引入的所有内容,为什么不使用BiPredicate?
BiPredicate<String, String> checkIfStringsAreEqual = (str1, str2) -> Objects.nonNull(str1) && Objects.nonNull(str2) && str1.equals(str2);
System.out.println(checkIfStringsAreEqual.test(test1, test2));
答案 1 :(得分:1)
根本不需要使用Java 8。您可以像这样简化您现有的方法:
public static boolean stringCheck(String test1, String test2) {
return test1 != null && test2 != null && test1.compareTo(test2) == 0;
}
或更短:
public static boolean stringCheck(String test1, String test2) {
return test1 != null && test1.equals(test2);
}
如果您真的想使用Java 8,可以使用Optional
,如下所示:
public static boolean stringCheck2(String test1, String test2) {
return Optional.ofNullable(test1).filter(t -> t.equals(test2)).isPresent();
}
答案 2 :(得分:1)
如果false
为空,则可以简单地返回test1
。不需要测试test2 == null
。
public static boolean stringCheckWithJava8(String test1, String test2) {
return Optional.ofNullable(test1).map(s1 -> s1.equals(test2)).orElseGet(() -> false).booleanValue();
}