ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] JAVA의 Steam API 간단 예시 (람다식, 메서드 참조)
    Language/Java 2023. 6. 30. 01:26

    각 용어 정리

    stream()

    JAVA 8 부터 추가된 반복자다. 간단하게 컬렉션(ex. List, ArrayList....) 형식을 for문으로 하나씩 반복해서 끝까지 참조하는 메소드다.
    stream()으로 시작해서 람다식으로 처리하면 된다.

    람다식

    추상 메서드가 하나뿐일 때 간단하게 표현하는 방법이다.

    예를 들어 정렬 방법을 선택할 때 사용한다.

    Arrays.sort(arr, new Comparator<int[]>(){
    @Override
    public int compare(int[] o1, int[] o2) {
        if (o1[1] == o2[1]) {
            return o1[0] - o2[0];
        }
        return o1[1] - o2[1];
        }
    });
    
    Arrays.sort(arr, (int[] o1, int[] o2) -> {
        if (o1[1] == o2[1]) {
            return o1[0] - o2[0];
            }
            return o1[1] - o2[1];
        });

    위와 같이 new Comparator라는 클래스의 compare 라는 메소드 하나를 사용하기 위할 때
    람다식으로 간단하게 표현 할 수 있다.

    메서드 참조

    클래스의 메소드를 간단하게 사용할 수 있게 한다.

    매우 간단한 예시를 들자면 정수값인 문자열들을 일일이 Integer 객체로 변환해주기 위해 parseInt를 사용할 때,
    이 코드를 단순화 시킬 수 있다.

    str.stream().map(Integer::parseInt);

    위와 같은 코드를 작성하면 str 컬렉션 객체를 map으로 반복하면서 Integer 객체로 변환 가능하다.

    예시 코드

    package Java;
    
    import java.util.*;
    import java.util.stream.Collectors;
    
    class Main {
    
        public static void main(String[] args) {
    
            ArrayList<Integer> arr = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                arr.add(i);
            }
    
            // forEach를 통해 리스트 요소의 개수 만큼 반복
            arr.stream().forEach(s -> System.out.println(s));
            System.out.println("=======================");
            arr.stream().forEach(System.out::println);
            System.out.println("=======================");
            // 리스트의 2로 나눈 나머지 값이 0인 값을 필터링 -> forEach로 반복 -> System.out 의 println 메소드로 출력
            arr.stream().filter(s -> s % 2 == 0).forEach(System.out::println);
            System.out.println("=======================");
    
            ArrayList<String> str = new ArrayList<>();
            str.add("281");
            str.add("182");
            str.add("192");
    
            // str의 요소룰 map을 통해 Integer 객체로 변환 -> collect를 통해 List 타입으로 변환 -> forEach를 통해 요소의 개수만큼 반복
            // ::의 용도는 Integer 클래스의 메소드를 수행하는 메소드 참조
            str.stream().map(Integer::parseInt).collect(Collectors.toList()).forEach(s -> System.out.println(s));
            System.out.println("=======================");
            // 9라는 문자열을 가진 요소를 필터링 -> 출력
            str.stream().filter(s -> s.contains("9")).forEach(System.out::println);
        }
    }

    출력

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    =======================
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    =======================
    0
    2
    4
    6
    8
    =======================
    281
    182
    192
    =======================
    192

    댓글

Designed by black7375.