SeouliteLab

[Java/자바] 람다식과 flatMap() 메서드 활용하기 본문

프로그래밍

[Java/자바] 람다식과 flatMap() 메서드 활용하기

Seoulite Lab 2024. 3. 8. 09:29

자바에서는 람다식과 함께 flatMap() 메서드를 사용하여 중첩된 컬렉션의 요소를 평면화할 수 있습니다. flatMap() 메서드는 중첩된 구조를 하나의 스트림으로 변환하여 처리할 때 유용합니다. 아래에서는 람다식과 flatMap() 메서드를 활용한 여러 예제를 살펴보겠습니다.

1. 중첩 리스트의 요소 평면화하기

람다식과 flatMap() 메서드를 사용하여 중첩된 리스트의 요소를 평면화하는 예제입니다.

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

public class FlatMapExample {
    public static void main(String[] args) {
        List> nestedList = Arrays.asList(
                Arrays.asList(1, 2, 3),
                Arrays.asList(4, 5, 6),
                Arrays.asList(7, 8, 9)
        );

        // 중첩 리스트의 요소를 평면화
        List flatList = nestedList.stream()
                                           .flatMap(List::stream)
                                           .collect(Collectors.toList());

        System.out.println("평면화된 리스트: " + flatList);
    }
}

2. 문자열 리스트의 각 요소를 문자로 분해하기

람다식과 flatMap() 메서드를 사용하여 문자열 리스트의 각 요소를 문자로 분해하는 예제입니다.

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

public class FlatMapExample {
    public static void main(String[] args) {
        List strings = Arrays.asList("hello", "world");

        // 문자열 리스트의 각 요소를 문자로 분해
        List characters = strings.stream()
                                         .flatMap(str -> Arrays.stream(str.split("")))
                                         .collect(Collectors.toList());

        System.out.println("문자로 분해된 리스트: " + characters);
    }
}

3. 객체 리스트의 각 요소에서 필드 값 추출하기

람다식과 flatMap() 메서드를 사용하여 객체 리스트의 각 요소에서 필드 값을 추출하는 예제입니다.

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

class Person {
    private List hobbies;

    public Person(String... hobbies) {
        this.hobbies = Arrays.asList(hobbies);
    }

    public List getHobbies() {
        return hobbies;
    }
}

public class FlatMapExample {
    public static void main(String[] args) {
        List people = Arrays.asList(
                new Person("swimming", "reading"),
                new Person("cooking", "photography"),
                new Person("hiking", "gardening")
        );

        // 객체 리스트의 각 요소에서 취미 추출
        List hobbies = people.stream()
                                     .flatMap(person -> person.getHobbies().stream())
                                     .collect(Collectors.toList());

        System.out.println("추출된 취미 리스트: " + hobbies);
    }
}

4. 배열의 각 요소를 2배로 만들기

람다식과 flatMap() 메서드를 사용하여 배열의 각 요소를 2배로 만드는 예제입니다.

import java.util.Arrays;
import java.util.stream.Stream;

public class FlatMapExample {
    public static void main(String[] args) {
        int[][] array = {{1, 2}, {3, 4}, {5, 6}};



        // 배열의 각 요소를 2배로 만들기
        int[] flattenedArray = Arrays.stream(array)
                                     .flatMapToInt(Arrays::stream)
                                     .map(num -> num * 2)
                                     .toArray();

        System.out.println("2배로 만들어진 배열: " + Arrays.toString(flattenedArray));
    }
}

5. 스트림의 각 요소를 문자열로 변환하기

람다식과 flatMap() 메서드를 사용하여 스트림의 각 요소를 문자열로 변환하는 예제입니다.

import java.util.Arrays;
import java.util.stream.Stream;

public class FlatMapExample {
    public static void main(String[] args) {
        int[][] array = {{1, 2}, {3, 4}, {5, 6}};

        // 각 요소를 문자열로 변환하기
        String concatenated = Arrays.stream(array)
                                    .flatMapToInt(Arrays::stream)
                                    .mapToObj(String::valueOf)
                                    .reduce("", (str1, str2) -> str1 + str2);

        System.out.println("문자열로 변환된 결과: " + concatenated);
    }
}

6. 스트림의 각 요소를 정렬하기

람다식과 flatMap() 메서드를 사용하여 스트림의 각 요소를 정렬하는 예제입니다.

import java.util.Arrays;

public class FlatMapExample {
    public static void main(String[] args) {
        int[][] array = {{3, 2}, {5, 1}, {4, 6}};

        // 각 요소를 정렬하기
        int[] sortedArray = Arrays.stream(array)
                                   .flatMapToInt(Arrays::stream)
                                   .sorted()
                                   .toArray();

        System.out.println("정렬된 배열: " + Arrays.toString(sortedArray));
    }
}