使用流和地图时"继续"不起作用



我有一个简单的代码,我使用流和.map((函数。 我对 id 进行了空检查,并在其中添加了继续 继续给我一个错误: 在循环外继续 当我删除继续时,我没有收到错误,但我不知道行为是否相同?

public List<Long> getIds(final Long[][] value){
List<Long> list = Arrays.stream(value).map(result ->{
final Long id = result[1];
if(id == null){
continue; // This part doesn't work (error: Continue outside of loop)
}
return id;
}).collect(Collectors.toList());
}

关于为什么 .streams 会发生这种情况的任何建议?然而,当我不使用流时,我可以使用继续

该问题已被标记为重复,但事实并非如此。使用return肯定适用于forEach,其中没有请求返回类型,但不map.

continue

在for 循环中工作。您可以使用flatMap作为解决方法:

List<Long> list = Arrays.stream(value).flatMap(result ->{
final Long id = result[1];
return Stream.ofNullable(id);
}).collect(Collectors.toList());

您还可以按照@Naman的建议直接使用Stream.ofNullable使其更简洁:

List<Long> list = Arrays.stream(value)
.flatMap(result -> Stream.ofNullable(result[1]))
.collect(Collectors.toList());

我首先提出的方法的另一个更优雅的版本是@Holger在filter中使用谓词:

List<Long> list = Arrays.stream(value)
.map(result -> result[1])
.filter(Objects::nonNull)
.collect(Collectors.toList());

最新更新