[Java] Stream 만들기

지니🧸·2023년 4월 7일
0

Java

목록 보기
4/13

🎞️ 값으로 스트림 만들기

Stream.of

  • 임의의 수를 인수로 받음
  • 정적 메서드
Stream<String> stream = Stream.of("Modern ", "Java ", "In ", "Action");
stream.map(String::toUpperCase)
	.forEach(System.out::println);

스트림 비우기

Stream<String> emptyStream = Stream.empty();

🎞️ null이 될 수 있는 객체로 스트림 만들기

객체로 스트림을 만드는데, 객체가 null이면 빈 스트림으로 만들어야 한다
System.getProperty - 제공된 키에 대응하는 속성이 없으면 null 반환

Stream<String> homeValueStream = 
					Stream.ofNullable(System.getProperty("home));

🎞️ 배열로 스트림 만들기

Arrays.stream: 배열을 인수로 받는 정적 메서드

int[] numbers = {2, 3, 5, 1, 23, 63};
int sum = Arrays.stream(numbers).sum();

🎞️ 파일로 스트림 만들기

java.nio.file.Files의 많은 정적 메서드가 스트림을 반환한다
(예) Files.lines는 주어진 파일의 행 스트림을 문자열로 반환함

🎞️ 함수로 무한 스트림 만들기

Stream.iterate, Stream.generate

  • 정적 메서드
  • 두 연산으로 무한 스트림을 만들 수 있음
    • 무한 스트림: 크기가 고정되지 않은 스트림
    • 하지만 무한한 값을 출력하지 않도록 주로 limit(n)과 함께 사용

🎞️ iterate 메서드

초기값과 람다를 인수로 받아 새로운 값을 끊임없이 생산
언바운드 스트림: 요청할 때마다 값을 끝없이 생산하는 스트림

Stream.iterate(0, n -> n + 2)
	.limit(10)
    .forEach(System.out::println);

predicate도 지원함

  • 비슷한 역할을 하는 filter는 사용 불가
    • filter는 언제 이 작업을 중단해야 하는지 알 수 없음
    • 대신 takeWhile을 쓰는 것이 좋음
Stream.iterate(0, n -> n < 100, n -> n + 4)
	.forEach(System.out::println);

🎞️ generate 메서드

generate

  • iterate과 달리 생산된 각 값을 연속적으로 계산하지는 않음
  • Supplier<T>를 인수로 받아 새로운 값을 생산함
Stream.generate(Math::random)
	.limit(5)
    .forEach(System.out::println);

참고: Modern Java in Action (라울-게이브리얼 등 지음)

profile
우당탕탕

0개의 댓글