어레이에서 스트림을 작성하려면 어떻게 해야 합니까?
현재 어레이에서 스트림을 생성해야 할 때마다
String[] array = {"x1", "x2"};
Arrays.asList(array).stream();
어레이에서 스트림을 직접 생성할 수 있는 방법이 있습니까?
Arrays.stream을 사용할 수 있습니다.
Arrays.stream(array);
를 사용할 수도 있습니다.Stream.of
@fge에서 설명한 바와 같이
public static<T> Stream<T> of(T... values) {
return Arrays.stream(values);
}
단, 주의해 주세요.Stream.of(intArray)
돌아온다Stream<int[]>
반면에.Arrays.stream(intArr)
돌아온다IntStream
활자 배열에 합격하면int[]
원형의 경우 간단히 설명하면 두 가지 방법의 차이를 알 수 있습니다.
int[] arr = {1, 2};
Stream<int[]> arr1 = Stream.of(arr);
IntStream stream2 = Arrays.stream(arr);
프리미티브 어레이를 전달한 경우Arrays.stream
다음 코드가 호출됩니다.
public static IntStream stream(int[] array) {
return stream(array, 0, array.length);
}
원시 어레이를 전달하면Stream.of
다음 코드가 호출됩니다.
public static<T> Stream<T> of(T t) {
return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}
따라서 다른 결과를 얻을 수 있습니다.
갱신일 :Stuart Marks 코멘트에서 언급한 바와 같이 하위 범위 오버로드Arrays.stream
사용하는 것보다 바람직하다.Stream.of(array).skip(n).limit(m)
전자는 SIZED 스트림을 생성하는 반면 후자는 그렇지 않기 때문입니다.그 이유는limit(m)
크기가 m인지 m보다 작은지 알 수 없지만,Arrays.stream
범위 확인 및 스트림의 정확한 크기 파악에 의해 반환된 스트림 구현의 소스 코드를 읽을 수 있습니다.Arrays.stream(array,start,end)
단, 스트림을 구현하기 위해서는Stream.of(array).skip().limit()
이 메서드 내에 있습니다.
@sol4me 솔루션 대체 방법:
Stream.of(theArray)
와의 차이점Arrays.stream()
: 어레이가 원시 유형일 경우 차이가 있습니다.예를 들어 다음과 같습니다.
Arrays.stream(someArray)
어디에someArray
는 입니다.long[]
, 이 반환됩니다.LongStream
.Stream.of()
한편, 는, 를 반환한다.Stream<long[]>
1개의 요소로 구성됩니다.
Stream.of("foo", "bar", "baz")
또는 이미 어레이가 있는 경우 다음을 수행할 수도 있습니다.
Stream.of(array)
프리미티브 타입의 경우IntStream.of
또는LongStream.of
기타.
거의 볼 수 없지만, 이것이 가장 직접적인 방법이다
Stream.Builder<String> builder = Stream.builder();
for( int i = 0; i < array.length; i++ )
builder.add( array[i] );
Stream<String> stream = builder.build();
병렬 옵션이 있는 로우 레벨 방식으로도 만들 수 있습니다.
업데이트: full array.length (길이-1이 아님)를 사용합니다.
/**
* Creates a new sequential or parallel {@code Stream} from a
* {@code Spliterator}.
*
* <p>The spliterator is only traversed, split, or queried for estimated
* size after the terminal operation of the stream pipeline commences.
*
* @param <T> the type of stream elements
* @param spliterator a {@code Spliterator} describing the stream elements
* @param parallel if {@code true} then the returned stream is a parallel
* stream; if {@code false} the returned stream is a sequential
* stream.
* @return a new sequential or parallel {@code Stream}
*
* <T> Stream<T> stream(Spliterator<T> spliterator, boolean parallel)
*/
StreamSupport.stream(Arrays.spliterator(array, 0, array.length), true)
Arrays.stream을 사용할 수 있습니다.
어레이.스트림(어레이);
이렇게 하면 어레이 입력 유형에 따라 스팀이 반환됩니다.String []
그 후 돌아오다Stream<String>
,한다면int []
그 후 반환한다.IntStream
입력 유형 어레이를 이미 알고 있다면 입력 유형으로 특정 어레이를 사용하는 것이 좋습니다.int[]
IntStream.of(어레이);
그러면 Intstream이 반환됩니다.
첫 번째 예에서는 Java는 메서드를 사용합니다.overloading
입력 타입에 근거해 특정의 메서드를 검색해, 2번째와 같이, 입력 타입과 특정의 메서드를 이미 알고 있습니다.
언급URL : https://stackoverflow.com/questions/27888429/how-can-i-create-a-stream-from-an-array
'programing' 카테고리의 다른 글
Python으로 긴 줄 바꿈 (0) | 2022.10.20 |
---|---|
스크립트를 실행하고 있는 Python 버전을 확인하려면 어떻게 해야 합니까? (0) | 2022.10.20 |
JavaScript에서 임의의 영숫자 문자열? (0) | 2022.10.20 |
MySQL 선택 / NULL 손실 시 그룹화 (0) | 2022.10.20 |
NumPy 다차원 배열의 ith 열에 액세스하려면 어떻게 해야 합니까? (0) | 2022.10.20 |