我想知道为什么Iterable
接口不提供stream()
和parallelStream()
方法。考虑下面的类:
public class Hand implements Iterable<Card> {
private final List<Card> list = new ArrayList<>();
private final int capacity;
//...
@Override
public Iterator<Card> iterator() {
return list.iterator();
}
}
它是手的实现,因为你可以在玩交换卡游戏的时候手里有卡。
本质上,它包装了List<Card>
,确保最大容量,并提供了一些其他有用的功能。最好是直接作为List<Card>
实现它。
现在,为了方便起见,我认为最好实现Iterable<Card>
,这样如果你想循环遍历它,就可以使用增强的for循环。(我的Hand
类也提供了一个get(int index)
方法,因此在我看来,Iterable<Card>
是合理的。)
Iterable
接口提供了以下内容(javadoc省略):
public interface Iterable<T> {
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
现在你可以通过:
Stream<Hand> stream = StreamSupport.stream(hand.spliterator(), false);
所以真正的问题是:
Iterable<T>
不提供实现stream()
和parallelStream()
的默认方法,我没有看到什么会使这是不可能的或不需要的?