Java Stream (6) 스트림 생성

2020. 7. 22. 01:52· Java
목차
  1. 빈 스트림 생성
  2. 매개변수를 사용한 생성
  3. null이 될 수도 있는 객체를 스트림화
  4. 배열으로부터 스트림 생성
  5. 파일으로부터 스트림 생성
  6. 함수형 인터페이스로 스트림 생성
  7. iterate
  8. generate

스트림 생성

다양한 방식으로 스트림을 생성할 수 있다.

빈 스트림 생성

Stream::empty 는 빈 스트림을 생성한다.

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

매개변수를 사용한 생성

Stream::of 는 매개변수 목록을 받고 Arrays.stream 을 반환하여 스트림을 생성한다.

Stream<String> cityNamesStream = Stream.of("Seoul", "Incheon",
        "Ulsan", "Daegu", "Gwangju", "Busan");

null이 될 수도 있는 객체를 스트림화

Java 9 이상에서 추가된 Stream.ofNullable 은 매개변수의 값이 null이 아니면 스트림을 생성한다.

null인 경우 Stream.empty 를 반환하여 빈 스트림을 생성한다.

Map<String, List<String>> map = new HashMap<>();
map.put("metropolitan", Arrays.asList("Seoul", "Incheon"));
map.put("Jeolla", Arrays.asList("Gwangju"));
map.put("Gyeongsang", Arrays.asList("Ulsan", "Daegu", "Busan"));

Stream<String> cityNamesStream =
        Stream.ofNullable(map.get("metropolitan").stream().collect(Collectors.joining()));
cityNamesStream.forEach(System.out::println); // SeoulIncheon

cityNamesStream = Stream.ofNullable(map.get("Gangwon").stream().collect(Collectors.joining()));
cityNamesStream.forEach(System.out::println); // 빈 스트림

배열으로부터 스트림 생성

Arrays.stream 은 배열을 매개변수로 받아서 스트림을 생성한다.

String[] cities = { "Seoul", "Incheon", "Gwangju", "Ulsan", "Daegu", "Busan" };
Stream<String> stream = Arrays.stream(cities);
stream.forEach(System.out::println);

파일으로부터 스트림 생성

Files::lines 는 파일을 읽어 행을 하나의 String으로 간주하는 스트림을 생성한다.

try {
    Stream<String> fileStream = Files.lines(Paths.get("test.txt"), Charset.defaultCharset());
    fileStream.flatMap(line -> Arrays.stream(line.split(" ")));
    fileStream.forEach(System.out::println);
} catch (IOException e) {
    e.printStackTrace();
}

함수형 인터페이스로 스트림 생성

Stream::iterate 와 Stream::generate 는 함수형 인터페이스를 매개변수로 받아 무한 스트림을 생성할 수 있다.

iterate

iterate는 for문과 비슷한 구조를 갖는다.

매개변수는 초기값, Predicate<T>, UnaryOperator<T> 를 사용한다.

Predicate<T> 는 선택사항이기 때문에 없어도 동작한다.

Stream.iterate(0, n -> n + 1) // 초기값은 0, n은 1씩 증가
        .limit(5)
        .forEach(System.out::println);

Stream.iterate(0, n -> n < 5, n -> n + 1) // 위와 같으나 n < 5 조건 추가
        .forEach(System.out::println);

generate

매개변수로 Supplier<T> 만 받기 때문에 스트림 생성 시 별도의 인수가 필요없는 경우에만 사용한다.

// 로또 번호를 생성해보자.
Random random = new Random();
IntStream.generate(() -> random.nextInt(45) + 1) // IntStream 역시 생성할 수 있다.
        .limit(6)
        .forEach(System.out::println);
저작자표시 비영리 동일조건 (새창열림)

'Java' 카테고리의 다른 글

안전하게 코딩하는 좋은 습관, 일급 콜렉션  (1) 2020.11.08
멱등성과 테스트  (0) 2020.11.08
Java Stream (5) 기본 자료형 스트림  (0) 2020.07.22
Java Stream (4) 스트림 주요 메소드  (0) 2020.07.17
Java Stream (3) 스트림의 개념  (0) 2020.07.15
  1. 빈 스트림 생성
  2. 매개변수를 사용한 생성
  3. null이 될 수도 있는 객체를 스트림화
  4. 배열으로부터 스트림 생성
  5. 파일으로부터 스트림 생성
  6. 함수형 인터페이스로 스트림 생성
  7. iterate
  8. generate
'Java' 카테고리의 다른 글
  • 안전하게 코딩하는 좋은 습관, 일급 콜렉션
  • 멱등성과 테스트
  • Java Stream (5) 기본 자료형 스트림
  • Java Stream (4) 스트림 주요 메소드
감동이중요해
감동이중요해
https://github.com/dhmin5693 dhmin5693@naver.com
감동이중요해
티끌모아 산을 쌓아보자
감동이중요해
전체
오늘
어제
  • 분류 전체보기 (111)
    • 알고리즘 (35)
    • Infra & Dev tools (10)
      • Git (2)
      • Cloud platform (5)
      • Mac, Linux (3)
    • BigData (1)
    • IT 도서 (11)
      • Clean Code (8)
    • Java (36)
      • Spring framework (19)
      • JPA (5)
      • Domain Driven Design (3)
    • Database (2)
      • oracle (1)
      • mysql (0)
    • Computer Science (7)
      • 운영체제 (7)
    • 기타 (9)
      • 크롤링(파이썬) (1)
      • 회고 (4)
      • Career (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • About me

인기 글

태그

  • Java
  • Stream
  • Clean Code
  • Database
  • 프로세스
  • 회고
  • 알고리즘
  • AWS
  • DDD
  • bean
  • 우아한테크캠프2기
  • Linux
  • 영속상태
  • JPA
  • Spring
  • 메모리
  • 블라인드공채
  • Mac
  • 영속
  • 운영체제

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
감동이중요해
Java Stream (6) 스트림 생성
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.