Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
Java 8 lambda空列表以进行空检查_Java_Lambda_Java 8_Java Stream - Fatal编程技术网

Java 8 lambda空列表以进行空检查

Java 8 lambda空列表以进行空检查,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我正在尝试执行null检查值列表,如果值为null,则将其更改为空。我在x.getSomeCall()中获得null作为值列表之一。null值不会作为空列表添加到新列表中 public class Example{ private List<Test> test; //setter //getter } public class Test{ private List<Test2> test2; //setter

我正在尝试执行
null
检查值列表,如果值为
null,则将其更改为空。
我在x.getSomeCall()中获得null作为值列表之一。null值不会作为空列表添加到新列表中

public class Example{
     private List<Test> test;
     //setter
     //getter
}

public class Test{
    private List<Test2> test2;
     //setter
     //getter
}

public class Test2{
    private String name;
    //setter
    //getter
}

public static void main(String args[]){
 if(isEmpty(example.getTest().stream()
                                  .flatMap(x -> x.getTest2() == null ? Stream.empty() : x.getTest2().stream())
                                  .collect(Collectors.toList())))

将一个复杂的流步骤分解为多个简单步骤通常更简单、可读性更强:

list1.stream()
     .map(SomeCall::getSomeCall)
     .filter(Objects::nonNull)
     .flatMap(Collection::stream)   // or List::stream if it's a list
     .collect(...)

您只需使用以下方法即可找到这样一个
总和

int size = stList.stream() // variable renamed not to start with numeric
        .mapToInt(st -> Optional.ofNullable(st.getSomeCall()).map(List::size).orElse(0))
        .sum();
更新问题

System.out.println(example.getTest().stream() // variable renamed not to start with numeric
        .mapToInt(st -> Optional.ofNullable(st.getTest2()).map(List::size).orElse(0))
        .sum());

获取值列表而不是大小列表

如果您得到的是
列表
,那么您现有的代码已经足够好了,不过您也可以通过以下方式获得:

List<Test2> list = example.getTest().stream()
        .map(a -> a.getTest2() == null ? new ArrayList<Test2>() : a.getTest2())
        .flatMap(List::stream)
        .collect(Collectors.toList());
List List=example.getTest().stream()
.map(a->a.getTest2()==null?新建ArrayList():a.getTest2())
.flatMap(列表::流)
.collect(Collectors.toList());

result.stream().flatMap(x->stream.of(x.getSomeCall()).collect(Collectors.toList()).size()为什么不这样做呢?我得到的大小是2。我想检查列表值。@Subham您定义了一个名为
somecall
的列表,但您没有在代码中使用它。。。当我说“编辑代码以确保其可编译”时,我指的是
1stlist
,因为它在Java中不是有效的标识符。进一步的我似乎无法理解你在这里试图实现的目标,因此,如果你能提供一些关于手头任务的更多信息,帮助我和其他处于相同位置的人了解你来自何方。如上所述,如果不给我们一些输入和输出的示例,你希望在这里实现什么目标是非常不清楚的预期产出。最让我困惑的是,使用
flatMap
与期望输入流值中的getSomeCall()返回的每个列表或null在输出中都有一个表示该列表或null的元素之间存在冲突。flatMap将把所有这些列表“融化”成一个简单的元素流,这样输入的空列表就不会出现在输出中。。。通常,如果接受空输入,它们将有相同的命运。。。。换句话说,如果示例input getSomeCall()调用将为第一个输入返回一个单例列表(只有一个元素),为第二个输入返回一个null,那么最直接的合理输出将只有一个元素。。。。如果第一个输入有5个元素,第二个输入为空,第三个输入为空,第四个输入有2个元素,那么最合理的输出将有7个元素。。。第一个和最后一个输入中存在的值。我得到的列表大小为1。我期望列表大小值为2。第一个值带有某个对象,第二个值为空列表。根据原始问题,这应该是可接受的答案@Subham请提供一个更明确的示例,说明您正在使用的数据不起作用。@HadiJ因为
st.getSomeCall()
可能是
null
。如果NULL考虑值为“代码>0 < /CODE”,或者“<代码>列表> /CODE >的实际大小。如何获得值列表而不是大小??@ SuffHAM,尽管我已经更新了答案,好像问题中的代码有点改变,它现在不会编译。请确保对其进行修复以完全理解。@结果为一个元素..不知道为什么应该更改为空列表的空值没有添加到新列表..但是这种开销是没有意义的,因为它不会更改结果,因此无法解决OP的问题。OP的问题似乎是,它们将打印未扁平化原始列表的循环输出与收集到扁平化
列表的流操作进行比较。当然,做完全不同的事情可能会产生完全不同的结果。但是,给每个读者提供一个建议来产生不必要的开销的答案是没有帮助的…
List<Test2> list = example.getTest().stream()
        .map(a -> a.getTest2() == null ? new ArrayList<Test2>() : a.getTest2())
        .flatMap(List::stream)
        .collect(Collectors.toList());