기본 콘텐츠로 건너뛰기

JAVA STREAM()

⚡ Java 8 Stream API 완벽 요약: 기본부터 필수 메소드까지

⚡ Java 8 Stream API 완벽 요약: 기본부터 필수 메소드까지

Java 8부터 도입된 Stream API는 컬렉션 데이터를 다루는 방식을 혁신적으로 변화시켰습니다. 데이터를 선언적이고 함수형으로 처리하여 코드를 훨씬 간결하고 가독성 높게 만들어 줍니다.


1. ✨ Stream 생성 및 기본 데이터

컬렉션에서 Stream을 생성하는 가장 일반적인 방법과 예시 데이터입니다.


import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;

// List에서 Stream 생성
List<String> names = Arrays.asList("a", "b", "c", "d");
// names.stream() 으로 Stream 시작
            

2. 🔧 중간 연산 (Intermediate Operations)

Stream을 변형하거나 필터링하며, 최종 연산이 호출되기 전까지 실행되지 않습니다 (**지연 실행**).

2.1. `filter()`: 조건에 맞는 요소 선택

특정 조건을 만족하는 요소만 다음 Stream으로 전달합니다.


// "a"만 필터링하여 남깁니다.
names.stream().filter(i -> i.equals("a")); 

// 결과: size 1 (Stream 내부에 "a"만 존재)
            

2.2. `map()`: 요소 변환 (매핑)

Stream의 각 요소를 다른 형태로 변환합니다.


names.stream()
     .filter(i -> i.equals("a"))
     .map(s -> s.toUpperCase())
     .collect(Collectors.toList()); 

// 최종 결과: List<String> -> ["A"]
            

2.3. `sorted()`: 정렬

Stream의 요소를 정렬하는 데 사용됩니다.


// 1. 기본 정렬 (Comparable 인터페이스 기준)
stream().sorted();

// 2. 람다를 사용한 사용자 정의 정렬 (오름차순 예시)
stream().sorted( (a, b) -> a.compareTo(b) );

// 3. Comparator 유틸리티 사용 (자연 순서)
stream().sorted( Comparator.naturalOrder());
            

3. 🏁 최종 연산 (Terminal Operations)

Stream 파이프라인을 종료하고 결과를 반환합니다. 이 연산이 호출될 때 중간 연산들이 비로소 실행됩니다.

3.1. 집계(Aggregation) 관련 메소드 (주로 숫자 Stream)

IntStream, LongStream, DoubleStream과 같은 기본 타입 Stream에서 유용합니다.

  • `count()`: 요소의 총 개수를 반환.
  • `min()`, `max()`: 최소/최대 값을 `Optional`로 반환.
  • `sum()`: 모든 요소의 합을 반환.
  • `average()`: 모든 요소의 평균을 `OptionalDouble`로 반환.

3.2. `findFirst()`: 첫 번째 요소 검색

Stream에서 조건을 만족하는 **첫 번째 요소**를 찾습니다.


// Stream에서 첫 번째 요소를 Optional로 반환 후, get()으로 값 획득 (위험할 수 있음)
String firstElement = names.stream().findFirst().get(); 

// 결과: "a"
            
**Optional 사용 권장:** `findFirst()`는 `Optional`을 반환합니다. `get()` 대신 `isPresent()` 확인이나 `orElse()`를 사용하여 안전하게 처리하는 것이 좋습니다.

3.3. `collect()`: 결과 수집

Stream의 요소들을 List, Set, Map 등 원하는 형태의 컬렉션으로 수집합니다. (가장 일반적인 최종 연산)

© 2025 Java 개발 & 함수형 프로그래밍 가이드.

댓글

이 블로그의 인기 게시물

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 (Request Parameter 전체보기)

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 Java Servlet Request Parameter 완전 정복 웹 애플리케이션에서 클라이언트로부터 전달되는 Request Parameter 를 확인하는 것은 필수입니다. 이 글에서는 Java Servlet 과 JSP 에서 GET/POST 요청 파라미터를 전체 출력하고 디버깅하는 방법을 다양한 예제와 함께 소개합니다. 1. 기본 예제: getParameterNames() 사용 Enumeration<String> params = request.getParameterNames(); System.out.println("----------------------------"); while (params.hasMoreElements()){ String name = params.nextElement(); System.out.println(name + " : " + request.getParameter(name)); } System.out.println("----------------------------"); 위 코드는 요청에 포함된 모든 파라미터 이름과 값을 출력하는 기본 방법입니다. 2. HTML Form과 연동 예제 <form action="CheckParamsServlet" method="post"> 이름: <input type="text" name="username"><br> 이메일: <input type="email" name="email"><b...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...

CSS로 레이어 팝업 화면 가운데 정렬하는 방법 (top·left·transform 완전 정리)

레이어 팝업 센터 정렬, 이 코드만 알면 끝 (CSS 예제 포함) 이벤트 배너나 공지사항을 띄울 때 레이어 팝업(center 정렬) 을 깔끔하게 잡는 게 생각보다 어렵습니다. 화면 크기가 변해도 가운데에 고정되고, 모바일에서도 자연스럽게 보이게 하려면 position , top , left , transform 을 정확하게 이해해야 합니다. 이 글에서는 아래 내용을 예제로 정리합니다. 레이어 팝업(center 정렬)의 기본 개념 자주 사용하는 position: absolute / fixed 정렬 방식 질문에서 주신 스타일 top: 3.25%; left: 50%; transform: translateX(-50%) 의 의미 실무에서 바로 쓰는 반응형 레이어 팝업 HTML/CSS 예제 1. 레이어 팝업(center 정렬)이란? 레이어 팝업(레이어 팝업창) 은 새 창을 띄우는 것이 아니라, 현재 페이지 위에 div 레이어를 띄워서 공지사항, 광고, 이벤트 등을 보여주는 방식을 말합니다. 검색엔진(SEO) 입장에서도 같은 페이지 안에 HTML이 존재 하기 때문에 팝업 안의 텍스트도 정상적으로 인덱싱될 수 있습니다. 즉, “레이어 팝업 센터 정렬”, “레이어 팝업 만드는 방법”과 같이 관련 키워드를 적절히 넣어주면 검색 노출에 도움이 됩니다. 2. 질문에서 주신 레이어 팝업 스타일 분석 질문에서 주신 스타일은 다음과 같습니다. <div class="layer-popup" style="width:1210px; z-index:9001; position:absolute; top:3.25%; left:50%; transform:translateX(-50%);"> 레이어 팝업 내용 <...