我想知道为什么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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个Hand的实现,因为你可以在玩卡片游戏时手中拿着牌.
基本上它包装a 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> …Run Code Online (Sandbox Code Playgroud) 早期jdk8-ea的javadoc 这样表示有一个java.util.stream.Streamable接口,它似乎有一个同样的关系Stream作为Iterable必须的Iterator.
现在好像我们被困住了Supplier<Stream>,这肯定是不一样的.
发生什么事了Streamable?