2016-08-15 2 views
4

사용자 지정 LinkedList 제네릭 클래스를 만드는 프로그램에서 작업 중이며 개체에서 stream()을 호출하여 스트림을 생성 할 수 있기를 원합니다. 나는 문서를보고, 구현할 인터페이스 (비슷하게 ... iterable, comparator, comparable)와 같이 내가 이것을하는데 도움이 될만한 것을 찾지 못했다. 나는 스트림리스트를 생성하려고 생각했다. 스트림 메소드는 Arrays.stream을 가진 스트림을 돌려 주었다. 연결된리스트를 반복하고 요소를 할당함으로써 생성 된 배열로부터. 이게 괜찮습니까? 또한이 일반 클래스는 상속 관계가없는 두 클래스에 제약 된 매개 변수를 갖기를 원합니다. 종류가 같음 < Person 또는 Alien> 수행 할 수 있음사용자 지정 데이터 구조 클래스에서 스트림 반환

+1

스트림 함수의 정의는 '호환성'이유로 기본 메소드 인'Collection' 인터페이스에 정의되어 있으며, Spliterator' 컬렉션. spliterator에 대해서는 https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html – mszymborski

+3

에서 읽을 수 있습니다. Spliterator 구현을 위해 'Spliterators.AbstractSpliterator'를 확장하는 것이 가장 쉽습니다. –

+3

자신의'LinkedList' 구현물이 내장 된'java.util.LinkedList'가하는 것과 유사한 스트림을 생성하기를 원한다면'java.util.LinkedList'의 소스 코드를 보시면됩니다. , 그것을하는 방법을보기 위해. – Andreas

답변

0

사용자 정의 LinkedList 클래스에 iterator() 메소드가 있다고 가정합니다. 또한 일정 시간 size() 메서드가 있다고 가정합니다. 이 가정을하면 다음 코드를 사용하여 stream() 메소드를 구현할 수 있습니다 :

public Stream<T> stream() { 
    Iterator<T> it = iterator(); 
    int characteristics = 0; // see characteristics docs in [Spliterator][1] 
    Spliterator<T> spliterator = Spliterators.spliterator(it, size(), charactistics); // see [Spliterators][2] 
    return StreamSupport.stream(spliterator, false); // see [StreamSupport][3] 
} 
관련 문제