如何将Java7迁移到Java8-forEach并返回列表<;对象>;如果输入为空,是否为空?
我的java7代码:如何将Java7迁移到Java8-forEach并返回列表<;对象>;如果输入为空,是否为空?,java,arrays,java-8,java-stream,Java,Arrays,Java 8,Java Stream,我的java7代码: List<Argument<?>> args = expression.match(text); if (args == null) { return null; } else { List<Object> list = new ArrayList<>(); for (Argument<?> arg : args) { list.add(arg.getValue());
List<Argument<?>> args = expression.match(text);
if (args == null) {
return null;
} else {
List<Object> list = new ArrayList<>();
for (Argument<?> arg : args) {
list.add(arg.getValue());
}
return list;
}
使用
map
代替flatMap
:
return (args == null) ? null : args.stream()
.map(arg -> arg.getValue())
.collect(Collectors.toList()); //modified
旁注:对于列表
,不要分配/返回null
,而是使用Collections.emptyList()
args==null
是在args.stream()
之前完成的。否则,您可能会获得NPElistargs.stream()
将导致NPE没有该if(args==null)
我需要返回null
,因为我的代码是一个匹配程序,而我的调用程序需要null
如果没有匹配,则需要一个匹配列表。是否可以在同一条指令中包含null测试,或者我保留if(args==null){…
?我也更喜欢Collections.emptyList()
或Optional.empty()
但我不是选择,因为我的方法的用户希望在没有匹配项的情况下使用null(是匹配项)@sgrillon我的答案是否有问题,所以你改变了主意(未启动和未接受)?你的答案很好,谢谢你的贡献。我更喜欢@Naman的答案,因为他回答得更快,尤其是他去了“基本”网站。
return (args == null) ? null : args.stream()
.map(arg -> arg.getValue())
.collect(Collectors.toList()); //modified
List<Argument<?>> args = expression.match(text);
return args == null ?
null :
args.stream().map(arg -> arg.getValue()).collect(Collectors.toList());