자바 스트림

장숭혁·2023년 11월 10일
0

TIL작성

목록 보기
15/60

자바의 스트림은 컬렉션과 배열 등의 데이터를 다루는데 사용되는 시퀀스이다. 스트림은 요소들의 연속된 흐름을 나타내며, 이를통해 데이터를 조작하고 처리한다.
스트림은 크게 두가지 유형의 작업을 수행한다.

  • 중간 작업(Intermediate Operations) : 스트림에 대해 연속적으로 적용되고, 다른 스트림들을 반환한다.(filter, map, sorted)

    • filter() : 조건에 맞는 요소만 필터링, if문과 for문을 합친것과 같다.

      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
      List<Integer> evenNumbers = numbers.stream()
                                        .filter(n -> n % 2 == 0)
                                        .collect(Collectors.toList());
      // 결과: evenNumbers = [2, 4, 6]```
      
       
    • map() : 각 요소를 다른 요소로 매핑한다.

      List<String> names = Arrays.asList("John", "Alice", "Bob");
      List<Integer> nameLengths = names.stream()
                                   .map(String::length)
                                   .collect(Collectors.toList());
      // 결과: nameLengths = [4, 5, 3]```
      
      
      
      
    • sorted() : 요소들을 정렬한다.

      List<Integer> sortedNumbers = numbers.stream()
                                         .sorted()
                                         .collect(Collectors.toList());
      // 결과: sortedNumbers = [1, 2, 3, 4, 5]
  • 최종 작업(Terminal Operations) : 스트리의 최종결과를 반환한다. 더이상은 스트림을 사용할 수 없게한다.(연산을 다시 수행하려면 스트림을 다시생성해야한다. collect, count, forEach 등이 있다.)

    • collect() : 스트림을 다른 형태(컬렉션, 맵, 리스트 등) 로 변환한다.

      Set<String> fruitSet = fruits.stream()
                                .collect(Collectors.toSet());
      // 결과: fruitSet = {"Apple", "Banana", "Orange"}
      
    • forEach() : 각 요소에 대해 특정 동작을 수행한다. 반환값을 가지고 있지 않다.

      colors.stream()
         .forEach(color -> System.out.println("Color: " + color));
      // 결과: Color: Red, Color: Green, Color: Blue (콘솔 출력)
      
    • reduce : 모든 요소를 하나의 값으로 줄인다.(sum(), max(), min())

      -sum
      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
      int sum = numbers.stream()
                   .reduce(0, Integer::sum);
      // 결과: sum = 15
      -max
      	List<Integer> numbers = Arrays.asList(3, 1, 5, 2, 4);
      int max = numbers.stream()
                   .reduce(Integer.MIN_VALUE, Integer::max);
      // 결과: max = 5
      -min
      List<Integer> numbers = Arrays.asList(3, 1, 5, 2, 4);
      int min = numbers.stream()
                   .reduce(Integer.MAX_VALUE, Integer::min);
      // 결과: min = 1

이러한 스트림 연산은 다양한 데이터 처리 및 변환에 사용되며, 함수형 프로그래밍의 장점을 살려 코드를 간결하게 만들어준다.

profile
코딩 기록

0개의 댓글

관련 채용 정보