我有一个简单的代码,我使用流和.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());