새소식

카테고리 없음

[JAVA] 스트림 02

  • -

스트림의 생성

 

1. 컬렉션

Collection 인터페이스에는 stream() 메소드가 정의되어 있다.

따라서 Collection 인터페이스를 구현한 모든 클래스에서도 stream() 메소드로 스트림을 생성할 수 있다.

또한 parallelStream() 메소드를 사용해 병렬 처리가 가능한 스트림을 생성할 수 있다.

Stream클래스의 forEach는 스트림의 최종 연산으로 

해당 스트림의 요소를 하나씩 소모해가며 순차적으로 요소에 접근하는 메소드이다. 

ArrayList<String> al = new ArrayList<>();
al.add("Time");
al.add("to");
al.add("lazy");

Stream<String> s = al.stream();
s.forEach(e -> System.out.print(e+" "));

2. 배열

Arrays 클래스에는 다양한 형태의 stream() 메소드가 클래스 메소드가 정의되어 있다.

기본타입인 int, long, double 형을 저장할 수 있는 배열에 관한 스트림이 별도로 정의되어 있다.

(IntStream, LongStream, DoubleStream)

String[] sArr = {"Time0", "to1", "lazy2", "Time3", "to4", "lazy5"};
		
Stream<String> stream_1 = Arrays.stream(sArr);
Stream<String> stream_2 = Arrays.stream(sArr, 2, 4); //범위 설정 가능

stream_1.forEach(e -> System.out.print(e+" "));
stream_2.forEach(e -> System.out.print(e+" "));

int[] iArr = {1, 3, 5, 7, 9, 2, 4, 6, 8};
IntStream stream_3 = Arrays.stream(iArr);
stream_3.forEach(e -> System.out.print(e+" "));

3. 가변 매개변수

Stream 클래스의 of() 메소드를 사용해 가변 매개변수를 전달받아 생성 가능

Stream<Integer> iStream_1 = Stream.of(0, 1, 2, 3, 4, 5);
IntStream iStream_2 = IntStream.of(6, 7, 8, 9, 10);

iStream_1.forEach(e -> System.out.print(e+" "));
iStream_2.forEach(e -> System.out.print(e+" "));

4. 지정된 범위의 연속된 정수

IntStream과 LongStream 인터페이스에는 range(), rangeClosed()가 정의되어 있다.

range(from, to) 는 to를 포함하지 않는 스트림을 생성

rangeClosed(from, to) 는 to를 포함하는 스트림을 생성

IntStream.range(0, 10).forEach(System.out::print);
IntStream.rangeClosed(0, 10).forEach(System.out::print);

5. 특정 타입의 난수

Random 클래스의 ints(), longs(), doubles() 와 같은 메소드를 사용하면 난수로 이루어진 스트림을 생성할 수 있다.

이 메소드들은 매개변수를 전달받지 않을 경우 무한 스트림을 반환한다. limit() 를 사용해 크기를 제한해야 한다.

IntStream iStream_1 = new Random().ints(4);
IntStream iStream_2 = new Random().ints().limit(4);

 

6. 람다 표현식

람다식을 매개변수로 전달받아 해당 람다식에 의해 반환되는 값을 요소로 하는 무한 스트림을 생성하기 위해

Stream 클래스에는 iterate() 와 generate() 메소드가 정의되어 있다.

 

iterate() 메소드는 람다식에 사용하여 반환된 값을 다시 사용해 무한 스트림을 생성

generate() 메소드는 매개변수가 없는 람다식을 사용해 반환된 값으로 무한 스트림을 생성

Stream<Integer> iStream = Stream.iterate(2,n -> n+2).limit(10);
Stream<String> gStream = Stream.generate(()-> "Timetolazy").limit(3);
iStream.forEach(System.out::println);
gStream.forEach(System.out::println);

7. 파일

파일의 한 행을 요소로 하는 스트림을 생성하기 위해 java.nio.file.Files 클래스에는 lines() 메소드가 있다.

또한 java.io.BufferedReader() 클래스의 lines() 메소드를 사용하면 파일 뿐만 아니라 다른 입력으로부터 데이터를 행 단위로 읽을 수 있다.

Stream<String> fStream = Files.lines(Path path);

8. 빈 스트림

아무 요소도 가지지 않는 빈 스트림은 Stream 클래스의 empty() 메소드를 사용해 생성할 수 있다.

Stream<Object> eStream = Stream.empty();

 

내용 출처 : tcpschool.com/

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.