Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Java7迁移到Java8-forEach并返回列表<;对象>;如果输入为空,是否为空?_Java_Arrays_Java 8_Java Stream - Fatal编程技术网

如何将Java7迁移到Java8-forEach并返回列表<;对象>;如果输入为空,是否为空?

如何将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());

我的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());
    }
    return list;
}

使用
map
代替
flatMap

return (args == null) ? null : args.stream()
        .map(arg -> arg.getValue())
        .collect(Collectors.toList()); //modified
旁注:对于
列表
,不要分配/返回
null
,而是使用
Collections.emptyList()

  • 将收集器.toSet()更改为收集器.toList()
  • 我假设检查
    args==null
    是在
    args.stream()
    之前完成的。否则,您可能会获得NPE


  • list
    args.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());