[JAVA] Java Stream | mapToInt() 활용한 연산, finFirst(), isPresent(), orElseThrow(), Optional<>

2025. 8. 7. 18:04·✏️공부/💡JAVA
728x90
반응형
더보기

노션 페이지 링크

 

JAVA Stream | Notion

[Day] 08.07 [Chapter] ~ 11강

www.notion.so

 

[Day] 08.07
[Chapter] ~ 11강


☑️ Stream 예제

📌 문제 1

String 배열에서 홀수만 뽑아서 int 배열로 만들기

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

    public static void exam1() {
        String[] strNums = {"1번", "2번", "3번", "4번", "5번"};

        // 문제
        // strNums에서 홀수만 뽑아서 int 배열로 만들기
        int[] arr = Arrays.stream(strNums)
                .map( str -> str.substring(0,1))
                .mapToInt( str -> Integer.parseInt(str))
                .filter( num -> num % 2 == 1 )
                .toArray();

        for(int num : arr){
            System.out.println(num);
        }

    }
}

✅ map(), mapToInt(), filter(), toArray() 사용

✅ subString 문자열 잘라내기
✅ split 기준을 토대로 자르고 나누기

 


📌 문제 2

int[] → String[]

public class JavaStream {
    public static void main(String[] args) {
        exam1();
        exam2();
    }

    public static void exam2() {
        int[] arr = {1, 2, 3, 4, 5};
        //문제
        // {"1번", "2번", "3번", "4번", "5번"} 배열을 얻을 수 있게 해주세요.

        String[] str = Arrays.stream(arr)
                .mapToObj(n -> n + "번")
                .toArray(String[]::new);//그냥 toArray 시 Object 타입으로 반환

        for(String s : str){
            System.out.println(s);
        }
    }
 }

✅ mapToObj(), toArray() 사용

✅ 그냥 toArray 시 Object 타입으로 반환하므로 타입 알려줘야 함


📌 문제 3

리스트 활용

  1. 남자들의 나이의 합
  2. 남자들의 나이 평균
  3. 남자들의 이름 출력
class JavaStream {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person(1, "Alice", 20, 'F'));
        people.add(new Person(2, "Bob", 25, 'M'));
        people.add(new Person(3, "David", 35, 'M'));

        // 문제
        // 1. 남자들의 나이의 합
        int sum = people.stream()
                .filter(person -> person.getGender() == 'M')
                .mapToInt(person -> person.getAge()) //Person 객체 이므로 연산 바로 안됨
                .sum(); //IntStream에서 제공하는 연산

        System.out.println("남자들의 나이 합: " + sum);

        // 2. 남자들의 나이 평균
        double avg = people.stream()
                .filter(person -> person.getGender() == 'M')
                .mapToInt(person -> person.getAge()) //Person 객체 이므로 연산 바로 안됨
                .average() //IntStream에서 제공하는 연산
                .orElse(0.0); //값이 없으면 기본값 0.0 반환

        System.out.println("남자들의 나이 평균: " + avg);

        // 3. 남자들의 이름 출력
        people.stream()
                .filter(p -> p.getGender() == 'M')
                .map(p -> p.getName())
                .forEach(System.out::println);
    }
}

class Person {
    private int id;
    private String name;
    private int age;
    private char gender;

    public Person(int id, String name, int age, char gender) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public char getGender() {
        return gender;
    }
}

✅ mapToInt(), sum(), average(), orElse(), filter(), map(), forEach() 사용

✅ Person 객체 이므로 연산 바로 안됨
✅ mapToInt로 변환하여 IntStream에서 제공하는 연산 사용

 


🔍 예제

Optional<> : 타입

class JavaStream {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person(1, "Alice", 20, 'F'));
        people.add(new Person(2, "Bob", 25, 'M'));
        people.add(new Person(3, "David", 35, 'M'));

        //Optional => 있을지도, 없을지도 **많이 사용
        Optional<Person> target = people.stream()
                .filter(p -> p.getId() == 2)
                .findFirst(); //Optional로 나옴

        if(target.isPresent()) { //존재할 때만 실행
            Person realTarget = target.get();
            System.out.println(target.get().getName());
        }

        Person target2 = people.stream()
                .filter(p -> p.getId() == 2)
                .findFirst()
                .orElseThrow(); //없을 경우 예외 던질수도
                //.orElse(null);
            }
    }
}

✅ Optional<> : 있을지도, 없을지도 모른다.

✅ finFirst() : 첫 번째 요소 찾음

✅ isPresent() : 해당 Optional 객체에 값이 존재하면 true, 없으면 false ➡️ 즉, 값이 존재할 때만 실행하기 위해 체크할 수 있는 조건
💡 값만 검사하고 끝 / 값이 있을 때 실행할 동작은 별도로 작성

✅ orElseThrow() : 값이 없으면 예외 던짐

 

 

728x90
반응형

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

[JAVA] ⚙️ 자료 구조 : Stack / Queue / Deque | 간단 비교 및 정리 💬  (0) 2025.08.21
[JAVA | 테스트] TDD (Test-Driven Development) | 자동테스트, red•green•blue 단계  (4) 2025.08.11
[JAVA] JAVA Stream | 명령형, 선언형, filter, map, stream, foreach, toArray, toList | 예제 ⭕️  (3) 2025.08.06
[JAVA] JAVA 기초 | 상속(extends), 추상 클래스 (abstract), Getter / Setter  (4) 2025.08.06
[JAVA] JAVA 기초 | static, 상속 (extends) | 예제 문제 ⭕️  (4) 2025.08.05
'✏️공부/💡JAVA' 카테고리의 다른 글
  • [JAVA] ⚙️ 자료 구조 : Stack / Queue / Deque | 간단 비교 및 정리 💬
  • [JAVA | 테스트] TDD (Test-Driven Development) | 자동테스트, red•green•blue 단계
  • [JAVA] JAVA Stream | 명령형, 선언형, filter, map, stream, foreach, toArray, toList | 예제 ⭕️
  • [JAVA] JAVA 기초 | 상속(extends), 추상 클래스 (abstract), Getter / Setter
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (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 ...
  • 인기 글

  • 태그

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

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[JAVA] Java Stream | mapToInt() 활용한 연산, finFirst(), isPresent(), orElseThrow(), Optional<>
상단으로

티스토리툴바