为什么 Iterable<T> 不提供 stream() 和 parallelStream() 方法?
我想知道为什么接口不提供和方法。请考虑以下类: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>
现在,为了方便起见,我认为实现会很好,这样如果你想循环它,你可以使用增强的for循环。(我的类还提供了一个方法,因此在我看来这是有道理的。Iterable<Card>
Hand
get(int index)
Iterable<Card>
该接口提供以下内容(省略 javadoc):Iterable
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()
不过,我发现的一个相关问题是:为什么Stream<T>不实现Iterable<T>?
奇怪的是,建议它以某种方式做相反的事情。