gpt4 book ai didi

java - 有没有更干净的方法在这里使用 Optional 而不是在三个地方返回 "NA"?

转载 作者:搜寻专家 更新时间:2023-11-01 02:35:33 26 4
gpt4 key购买 nike

    public String getSanitisedMessage() {

Throwable rootCause = context.getRootCauseException();
if(rootCause != null) {
return Optional.ofNullable(rootCause.getMessage())
.map(message -> Stream.of(
// clean message substrings we want to find
"Connection timed out",
"Connection reset",
"Connection was lost",
"FTP Fails"
).filter(subString -> message
.toLowerCase()
.contains(subString.toLowerCase())
).findFirst().orElse("NA")
).orElse("NA");
} else return "NA";

}

目标是检查 Throwable 的消息中的子字符串,如果找到则返回子字符串,否则返回 NAcontext.getRootCauseException()Throwable.getMessage() 调用都可能返回 null

最佳答案

一种可能的方法是使用 flatMapfindFirst 而不是 map 作为:

// method argument is just for the sake of an example and clarification here 
public String getSanitisedMessage(Throwable rootCause, Set<String> primaryCauses) {
return Optional.ofNullable(rootCause)
.map(Throwable::getMessage)
.map(String::toLowerCase)
.flatMap(message -> primaryCauses.stream()
.map(String::toLowerCase)
.filter(message::contains)
.findFirst())
.orElse("NA");
}

或者也可以使用三元运算符将其表示为:

return rootCause == null || rootCause.getMessage() == null ? "NA" :
primaryCauses.stream().map(String::toLowerCase).filter(subString -> rootCause.getMessage()
.toLowerCase().contains(subString)).findFirst().orElse("NA");

关于java - 有没有更干净的方法在这里使用 Optional 而不是在三个地方返回 "NA"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55003799/

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