본문 바로가기
개발/java

Stream 예제

by 가시죠 2022. 2. 6.
반응형

Stream

1.자바 8에서 추가한 스트림(Streams)은 람다를 활용할 수 있는 기술 중 하나
2.자바 8 이전에는 배열 또는 컬렉션 인스턴스를 다루는 방법은 for 또는 foreach 문을 돌면서 요소 하나씩을 꺼내서 다루는 방법
3.간단한 경우라면 상관없지만 로직이 복잡해질수록 코드의 양이 많아짐

예제

  1. 문자 배열에 특정 값을 찾아서 출력

문자 배열

List<String> stringArrayList = new ArrayList<String>(
    Arrays.asList("a", "b", "c", "d", "e", "f")
);

Iterator 사용

/* Iterator 사용 */
System.out.println("Iterator use");
Iterator<String> iterator = stringArrayList.iterator();
while (iterator.hasNext()) {
    String value = iterator.next();
    if ("b".equals(value)) {
        System.out.println(value);
}
}

for each 사용

/* for each 사용 */
System.out.println("for each use");
for (String value : stringArrayList) {
    if ("b".equals(value)) {
        System.out.println(value);
    }
}

stream 사용 1

stringArrayList.stream() // 스트림으로 가져와서
        .filter(s -> "b".equals(s)) // "b" 값으로 필터
        .forEach(s -> System.out.println(s)); // 출력

stream 사용 1 보다 좀더 줄여서 사용

stringArrayList.stream() // 스트림으로 가져와서
        .filter("b"::equals) // equals 인자값이 "b" 로 대응되어 줄임
        .forEach(s -> System.out.println(s)); // 출력

stream 사용 2 보다 좀더 줄여서 사용

stringArrayList.stream() // 스트림으로 가져와서
        .filter("b"::equals) // equals 인자값이 "b" 로 대응되어 줄임
        .forEach(System.out::println); // println 인자값이 forEach 인자값 대응되어 줄임

예제

  1. 숫자 배열로 stream 예제

숫자 배열

List<Integer> integerList = Arrays.asList(11, 5, 6, 1, 8, 0, 15, 8, 9, 10,1);

중복제거, 정렬

List<Integer> collect = integerList.stream()
        .distinct() // 중복제거
        .sorted() // 정렬
        .collect(Collectors.toList()); // 리스트로 받음

중복제거, 정렬, 10보다 큰 값만 추출

List<Integer> collect1 = integerList.stream()
            .distinct() // 중복제거
            .sorted() // 정렬
            .filter(integer -> integer > 10) // 10보다 큰 값만 필터
            .collect(Collectors.toList()); // 리스트로 받음

특정 값 보다 큰 값이 있는지 찾기

boolean present = integerList.stream()
            .distinct() // 중복제거
            .filter(integer -> integer > 10) // 10보다 큰 값
            .findAny() // 아무거나 하나
            .isPresent(); // 존재 하는지

주의사항 - 딱 한번만 탐색 할 수 있다.

List<String> title = Arrays.asList("a", "b", "c");
Stream<String> s = title.stream();
s.forEach(System.out::println); // 출력됨
s.forEach(System.out::println); // IllegalStateException : 스트림이 이미 소비되었거나 닫힘
반응형

댓글