[JAVA] JAVA Stream | 명령형, 선언형, filter, map, stream, foreach, toArray, toList | 예제 ⭕️

2025. 8. 6. 18:38·✏️공부/💡JAVA
728x90
반응형
노션 페이지
 

자바 스트림 | Notion

[Day] 08.06 [Chapter] ~ 6강 / 문제 1

www.notion.so

 

 

 

[Day] 08.06
[Chapter] ~ 6강 / 문제 1


📌 자바 스트림

선언형⭕️ (명령형 ❌)

✅ 스트림 동작 설명
- Filter ➡️ 필터링
- Map ➡️ 가공
- Collect ➡️ 담아서 배송


📌 명령형과 선언형 차이

명령형 how?? -> if, for
선언형 What?? -> stream api

public class Main {
    public static void main(String[] args) {

        int[] arr = {1,2,3,4,5,6,7,8,9,10};

        // 출력
        // 명령형
        // 장: 직관적, 자유도.
        // 단: 실수할 확률. 코드가 조금 복잡해지면 의도가 잘 안보인다.
        for(int i = 0; i < 10; i++) {
            System.out.println(arr[i]);
        }

        // 선언형
        // 하고싶은 것을 언급 -> 어떻게 할 것인지는? 자바가 알아서 해줌.
        // 장: 실수할 확률 줄어듦. 코드 의도가 좀 더 명확히 드러남
        Arrays.stream(arr)
                .forEach(System.out::println); //뭘 사용할지만 알려주면 forEach가 알아서 해줌

    }
}

 


[ 예제 1️⃣ ] 테스트 메서드 활용

public class JavaStream {
    public static void main(String[] args) {

        int[] arr = {1,2,3,4,5,6,7,8,9,10};

        for(int i = 0; i < 10; i++) {
            System.out.println(arr[i]);
        }

        Arrays.stream(arr)
                .forEach(JavaStream::test); // 메서드 레퍼런스

        test(10);
    }

    public static void test(int num) {
        System.out.println("숫자 : %d".formatted(num));
    }
}

 

[ 예제 2️⃣ ] 람다 사용

간편한 일회성 메서드 사용 가능 ⭕️
➡️ 메서드 활용이 불편할 때, 람다 사용

public class Main {
    public static void main(String[] args) {

        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        for (int i = 0; i < 10; i++) {
            System.out.println(arr[i]);
        }

        Arrays.stream(arr)
                .forEach(Main::test); // 메서드 레퍼런스

        // 1 ~ 100까지 수 중에서 짝수만 출력
        IntStream
                .rangeClosed(1, 100)
                .forEach(
                        (num) -> {
                            if (num % 2 == 0) {
                                System.out.println("짝수 : %d".formatted(num));
                            }
                        }
                );

        // 1회성 함수 => 익명함수 => 람다

        // () -> { System.out.println("Hello, World!"); }

        // 스트림에서는 람다를 많이 사용.
        // 단, 재사용성이 높거나 복잡한 코드는 함수로 정의해서 사용하는 것이 좋음.

    }

    public static void test(int num) {
        System.out.println("숫자 : %d".formatted(num));
    }

}

✅ 스트림 매개변수 1개씩
✅ 단일 명령어는 중괄호 없애도 됨
✅ 직접 정의보단 람다 사용 (1회성)
✅ 재사용 높은 코드 & 복잡한 코드 ➡️ 함수로 만들어서 사용

 

[ 예제 3️⃣ ] filter 사용

원하는 요소만 선택

public class Main {
    public static void main(String[] args) {

        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        for (int i = 0; i < 10; i++) {
            System.out.println(arr[i]);
        }

        Arrays.stream(arr)
                .forEach(Main::test); // 메서드 레퍼런스

        System.out.println("== 1부터 100 스트림 출력 ==");

        // 1 ~ 100까지 수 중에서 짝수만 출력
        IntStream
                .rangeClosed(1, 100) // 첫번째 스트림
                .filter((num) -> { // 두번째 스트림
                    return num % 2 == 0; // 짝수만 통과
                })
                .forEach(System.out::println); // 최종 처리

        IntStream
                .rangeClosed(1, 100) // 첫번째 스트림
                .filter(num -> num % 2 == 0) // 이렇게 축약 표현도 가능.
                .forEach(System.out::println); // 최종 처리
    }
}

✅ Trace Current Stream Chain 기능으로 시각적 확인 가능

✅ return 없이 축약 가능

 

[ 예제 4️⃣ ] 종단함수 사용

종단함수 사용 시 스트림 끝남
보통 처리 결과를 배열이나 리스트로 받는 toArray, toList 많이 사용

public class Main {
    public static void main(String[] args) {

        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        for (int i = 0; i < 10; i++) {
            System.out.println(arr[i]);
        }

        System.out.println("== 1부터 100 스트림 출력 ==");

        IntStream
                .rangeClosed(1, 100)
                .filter((num) -> {
                    return num % 2 == 0;
                })
                .forEach(System.out::println); // 스트림 종료 => 종단 함수 (collect, forEach, toArray)

        IntStream
                .rangeClosed(1, 100)
                .filter(num -> num % 2 == 0)
                .forEach(System.out::println); // 반환 없이 처리하고 종료

        int[] arr2 =  IntStream
                .rangeClosed(1, 100)
                .filter(num -> num % 2 == 0)
                .toArray(); // 스트림의 결과를 배열로 반환

        System.out.println(arr2.length); // 50

    }
}

✅ 종단함수 무조건 체이닝 마지막(종단함수 이후에 체이닝 안됨)
✅ foreach는 void / 즉, 리턴이 없음. 그래서 마지막에 처리해서 끝.
✅ 연속적인 작업할 때 스트림 쓰지만, 스트림 != 배열 != list
✅ toArray로 스트림 안줘서 종단함수

 


📌 문제

public class JavaStream {
    public static void main(String[] args) {

        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        // 문제
        // arr의 모든 요소 값이 2배된 배열 만들기

        //명령형
        int[] arr2 = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            arr2[i] = arr[i] * 2;
        }
        System.out.println(Arrays.toString(arr2));


        //선언형
        int[] arr2 = Arrays.stream(arr)
                .map((int num) -> {
                    return num * 2;
                })
                .toArray();
        System.out.println(Arrays.toString(arr2));


        // arr의 모든 요소 값이 3배된 배열 만들기
        //선언형
        int[] arr3 = Arrays.stream(arr)
                .map((int num) -> {
                    return num * 3;
                })
                .toArray();
        System.out.println(Arrays.toString(arr3));


        // arr의 모든 요소 값이 10배된 배열 만들기
        //선언형
        int[] arr10 = Arrays.stream(arr)
                .map((int num) -> {
                    return num * 10;
                })
                .toArray();
        System.out.println(Arrays.toString(arr10));
    }
}
728x90
반응형

'✏️공부 > 💡JAVA' 카테고리의 다른 글

[JAVA | 테스트] TDD (Test-Driven Development) | 자동테스트, red•green•blue 단계  (4) 2025.08.11
[JAVA] Java Stream | mapToInt() 활용한 연산, finFirst(), isPresent(), orElseThrow(), Optional<>  (4) 2025.08.07
[JAVA] JAVA 기초 | 상속(extends), 추상 클래스 (abstract), Getter / Setter  (4) 2025.08.06
[JAVA] JAVA 기초 | static, 상속 (extends) | 예제 문제 ⭕️  (4) 2025.08.05
[JAVA] JAVA 기초 | 배열, 리스트(ArrayList<>) , 맵(Map<>), 제네릭  (3) 2025.08.04
'✏️공부/💡JAVA' 카테고리의 다른 글
  • [JAVA | 테스트] TDD (Test-Driven Development) | 자동테스트, red•green•blue 단계
  • [JAVA] Java Stream | mapToInt() 활용한 연산, finFirst(), isPresent(), orElseThrow(), Optional<>
  • [JAVA] JAVA 기초 | 상속(extends), 추상 클래스 (abstract), Getter / Setter
  • [JAVA] JAVA 기초 | static, 상속 (extends) | 예제 문제 ⭕️
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    프로그래머스 #JAVA
    github
    백엔드
    자바
    알고리즘
    GIT
    프로그래머스
    S3
    AWS
    트랜잭션
    Set
    map
    Java
    동시성제어
    Stream
    코딩테스트
    데브코스
    자료구조
    baekjoon
    네트워크
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[JAVA] JAVA Stream | 명령형, 선언형, filter, map, stream, foreach, toArray, toList | 예제 ⭕️
상단으로

티스토리툴바