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-loop를 사용할 수 있도록 구현하는 것이 좋을 것이라고 생각 했습니다. (내 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()
해결책 일 수도 있지만 모든 요구를 충족하지 못할 수도 있습니다 ...)