[기술정리]Stream API

송송승현's avatar
Nov 20, 2024
[기술정리]Stream API

정의

💡
데이터 처리 작업을 보다 간결하고 효율적으로 수행할 수 있게 도와주는 기능
컬렉션이나 배열 등의 데이터를 선언형 방식으로 처리
함수형 프로그래밍의 요소를 활용하여 데이터를 필터링, 변환. 집계하는 등의 작업을 손쉽게 처리

특징

  • 선언적 코드 : 데이터를 처리하는 방식을 직접적으로 설명하지 않고, 어떤 작업을 할 것인지를 선언적으러 기술
  • 병렬 처리 지원 : 간단한게 병렬 스트림을 사용하여 데이터 처리를 병렬로 수행
  • 중간 연산과 최종 연산 : 스트림 연산은 중간 연산과 취종 연산으로 구분

주요 Stream 메서드

중간 연산(Intermediate Operations)

  • filter : 조건에 맞는 요소를 걸러냄
  • Map : 요소를 다른 형태로 변환
  • sorted : 요소를 정렬

최종 연산

  • collect : 스트림을 컬렉션이나 다른 형태로 변환
  • forEach : 각 요소에 대해 작업을 수행
  • reduce : 요소 결합
  • count : 요소의 개수 카운트

예제

import java.util.Arrays; import java.util.List; //Stream public class CountApp { public static void main(String[] args) { List<String> names = Arrays.asList("Alice","Bob","Charlie", "David"); //Stream을 이용한 중간연산 List<String> r1 = names.stream().filter(name -> name.length()>3).toList(); r1.forEach(s->System.out.println(s)); long r2 = names.stream().filter(name -> name.length()>3).count(); System.out.println(r2); } } import java.util.Arrays; import java.util.List; // 기존 데이터를 변형할 때 - Map 사용 public class MapApp { public static void main(String[] args) { List<String> names = Arrays.asList("Alice","Bob","Charlie", "David"); List<String> newNames = names.stream(). map(name -> name.toLowerCase()). filter(name -> name.length()>3). toList(); newNames.forEach(name -> System.out.println(name)); } } import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; //Stream public class GroupApp { public static void main(String[] args) { List<String> names = Arrays.asList("Alice","Bob","Charlie", "David","Anna"); var groupData=names .stream() .map(name -> name.toUpperCase()) .collect(Collectors.groupingBy(s -> s.charAt(0))); System.out.println(groupData); } } import java.util.Arrays; import java.util.List; public class ReduceApp { public static void main(String[] args) { // 1.Reduce(조인) List<Integer> nums = Arrays.asList(1,2,3,4); int sum = nums.stream().mapToInt(x->x).sum(); System.out.println(sum); int sum2 = nums.stream().reduce(5,(prev,next)->{ System.out.println("prev" + prev); System.out.println("next" + next); System.out.println("prev" + prev); return prev+next; }); System.out.println(sum2); } } import java.util.Arrays; import java.util.List; // 기존 데이터를 변형할 때 - Map 사용 public class SortApp { public static void main(String[] args) { List<Integer> nums = Arrays.asList(5,2,3,1,4,2,5); nums.stream() .sorted() .distinct() .forEach( s -> System.out.println(s)); } }
Share article

송승현의 블로그