Java 스트림 반복
1. Iterable을 스트림으로 변환
Iterable 인터페이스는 일반성을 염두에 두고 설계되었으며 자체적으로 stream()
메서드를 제공하지 않는다.
간단히 말해서 이를 StreamSupport.stream()
메서드에 전달하고 지정된 Iterable 인스턴스에서 Stream을 가져올 수 있다.
Iterable 인스턴스를 고려한다.
1
Iterable<String> iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
이 Iterable 인스턴스를 스트림으로 변환하는 방법은 다음과 같다.
1
StreamSupport.stream(iterable.spliterator(), false);
StreamSupport.stream()
의 두 번째 매개변수는 결과 스트림이 병렬이어야 하는지 또는 순차적이어야 하는지를 결정한다. 병렬 Stream의 경우 true로 설정해야 한다.
이제 구현을 테스트해 본다.
1
2
3
4
5
6
@Test
public void givenIterable_whenConvertedToStream_thenNotNull() {
Iterable<String> iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
Assert.assertNotNull(StreamSupport.stream(iterable.spliterator(), false));
}
또한 간단한 참고 사항은 스트림은 재사용할 수 없지만 Iterable은 재사용 가능 하다는 것이다. 또한 주어진 Iterable에 의해 설명된 요소에 대해 java.lang.Spliterator
인스턴스를 반환하는 Spliterator()
메서드를 제공한다.
2. 스트림 작업 수행
간단한 스트림 작업을 수행한다.
1
2
3
4
5
6
7
8
9
10
@Test
public void whenConvertedToList_thenCorrect() {
Iterable<String> iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
List<String> result = StreamSupport.stream(iterable.spliterator(), false)
.map(String::toUpperCase)
.collect(Collectors.toList());
assertThat(result, contains("TESTING", "ITERABLE", "CONVERSION", "TO", "STREAM"));
}
[출처 및 참고]
This post is licensed under CC BY 4.0 by the author.