我正在寻找一种简洁的方法来重写一段Java代码,以便它使用流以null安全的方式将流转换为数组。这是原始代码:
public MailObject toMailObject(final String[] ccAddresses) {
final MailObject mailObject = new MailObject();
// line of code to be altered
mailObject.setCcAddresses(ccAddresses == null
? Collections.emptyList() : Arrays.asList(ccAddresses));
// other necessary code
return mailObject;
}
Run Code Online (Sandbox Code Playgroud)
我想过要做这样的事情:
// psuedocode that obviously doesn't compile
Optional.ofNullable(ccAddresses).SOMETHING.orElse(Collections.emptyList());
Run Code Online (Sandbox Code Playgroud)
其中的某些内容如下:
Arrays.stream(ints).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但我似乎语法不太正确。
这个问题很有帮助,但没有完全解决我的问题。有人能指出我正确的方向吗?我觉得我已经接近了...
非常感谢您的宝贵时间。
您可以使用map:
List<String> ccAddrs = Optional.ofNullable(ccAddress)
.map(Arrays::asList)
.orElse(Collections.emptyList())
Run Code Online (Sandbox Code Playgroud)
我认为,到目前为止,您所拥有的代码是完全可读的。我认为将a Stream用于此类操作只会使事情复杂化。如果您仍然想使用Stream,则可以使用以下方法:
mailObject.setCcAddresses(Stream.ofNullable(ccAddresses)
.flatMap(Arrays::stream)
.collect(Collectors.toUnmodifiableList()));
Run Code Online (Sandbox Code Playgroud)
如您所见,这是一种更难以理解的方法,我不建议您在简单的三元表达式上使用它。
您的Optional解决方案更具可读性,如下所示:
mailObject.setCcAddresses(Optional.ofNullable(ccAddresses)
.map(Arrays::asList)
.orElse(Collections.emptyList()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |