Iterable
インターフェイスがstream()
and 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()
ただし、関連する質問は次のとおりです。なぜStream <T>はIterable <T>を実装しないのですか?
奇妙なことに、逆方向にやることを示唆しています。
break;
て反復を行うことができますか?(Stream.findFirst()