使用Java 8功能比较两个字符串

时间:2019-05-28 15:50:45

标签: java

我正在探索各种有效的方法来比较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的问题?

3 个答案:

答案 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();
    }