jør*_* s. 5 java iterator consumer java-8 spliterator
我想从拆分器中获取下一个元素,而不仅仅是对下一个元素“执行操作”。例如,通过实现以下方法
<T> T getnext(Spliterator<T> s) {
}
Run Code Online (Sandbox Code Playgroud)
我发现的所有搜索结果都说tryAdvance()就像是迭代器hasNext()和next()的组合,除了那是一个大谎言,因为我无法获取下一个元素,只是“对下一个元素执行操作”。
您可以将项目包装在列表中,然后从该列表返回:
public static <T> T getNext(Spliterator<T> spliterator) {
List<T> result = new ArrayList<>(1);
if (spliterator.tryAdvance(result::add)) {
return result.get(0);
} else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
为了让调用者更清楚地知道这是一个可能返回 null 的操作,请考虑返回Optional
:
public static <T> Optional<T> getNext(Spliterator<T> spliterator) {
final List<T> result = new ArrayList<>(1);
if (spliterator.tryAdvance(result::add)) {
return Optional.of(result.get(0));
} else {
return Optional.empty();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
132 次 |
最近记录: |