gpt4 book ai didi

java-8 - java 8 方法引用 : either `equals` or `equalsIgnoreCase`

转载 作者:行者123 更新时间:2023-12-01 09:16:20 25 4
gpt4 key购买 nike

我试图转换方法的主体 boolean exists(String value, boolean isCaseSensitive) :

    for(String str : existingNames){
if(isCaseSensitive ? str.equals(name) : str.equalsIgnoreCase(name)){
return true;
}
}

return false;

到利用 java8 方法引用的解决方案:
    Predicate<String> equalityPred = isCaseSensitive ? 
name::equals :
name::equalsIgnoreCase;

return existingNames.stream().anyMatch(equalityPred);

然后我看到这种方式在相反的方向上执行相等(例如 value.equals(str) )。
有没有办法解决这个问题并仍然使用方法引用,如果没有,java8 方法是什么。

最佳答案

平等没有“相反的方向”。唯一的问题可能是 null 的行为值。如果集合包含 null,您的循环可能会失败,您的方法引用将失败,如果 namenull .

您可以使用 lambda 表达式实现原始行为:

boolean check(Collection<String> existingNames, String name, boolean isCaseSensitive) {
Predicate<String> equalityPred = isCaseSensitive?
s -> s.equals(name):
s -> s.equalsIgnoreCase(name);

return existingNames.stream().anyMatch(equalityPred);
}

但考虑 null 意义不大为 name参数,当它永远不会相等时,因为代码将失败并返回 NullPointerException , 如果集合包含 null .

获得 null 的合理行为,你可以使用
boolean check(Collection<String> existingNames, String name, boolean isCaseSensitive) {
Predicate<String> equalityPred = name==null? Objects::isNull:
isCaseSensitive? name::equals: name::equalsIgnoreCase;

return existingNames.stream().anyMatch(equalityPred);
}

要不就
boolean check(Collection<String> existingNames, String name, boolean isCaseSensitive) {
return name==null || isCaseSensitive?
existingNames.contains(name):
existingNames.stream().anyMatch(name::equalsIgnoreCase);
}

如果您知道 Collection 永远不会包含 null ,但想支持 nullname参数,你也可以使用
boolean check(Collection<String> existingNames, String name, boolean isCaseSensitive) {
return name!=null && existingNames.stream()
.anyMatch(isCaseSensitive? name::equals: name::equalsIgnoreCase);
}

关于java-8 - java 8 方法引用 : either `equals` or `equalsIgnoreCase` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43745043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com