📌Zero-base

Java 람다식, 스트림

구 일 2024. 4. 29. 23:14
728x90
반응형

 

람다 표현식 (Lambda Expression)

메소드 대신 하나의 식으로 표현하는 것

익명 함수 (Anonymous function)

 

반환타입 메소드 이름(매개변수,...) {
    실행문;
}
public int sum(int x, int y) {
    return x + y;
}

(매개변수,....) -> { 실행문 .... }
(int x, int y) -> { return x + y; }

 

 

 

람다식 장점

  • 일반적으로 코드가 간결해짐
  • 코드 가독성이 높아짐
  • 생산성이 높아짐

람다식 단점

  • 재사용이 불가능 (익명)
  • 디버깅 어려움
  • 재귀함수로는 맞지 않음

 

스트림 (Stream)

배열, 컬렉션 등의 데이터를 하나씩 참조하여 처리 가능한 기능

for문의 사용을 줄여 코드를 간결하게 함

스트림은 크게 3가지로 구성

  • Stream 생성
  • 중개 연산
  • 최종 연산

데이터소스객체.Stream생성().중개연산().최종연산();

 

스트림 생성

배열 스트림

String[] arr = new String[]{"a", "b", "c"};
Stream stream = Arrays.stream(arr);

컬렉션 스크림

ArrayList list = new ArrayList(Arrays.asList(1, 2, 3));
Stream stream = list.stream();

 

 

스트림 중개연산

Filtering - filter 내부 조건에 참인 요소들을 추출

IntStream intStream = Intstream.range(1, 10).filter(n -> n % 2 == 0);

 

Mapping - map 안의 연산을 요소별로 수행

IntStream intStream = Intstream.range(1, 10).map(n -> n + 1);

 

 

스트림 최종연산

Sum, Average

IntStream.range(1, 5).sum();
IntStream.range(1, 5).average().getAsDouble();

 

min, max

IntStream.range(1, 5).min().getAsInt();
IntStream.range(1, 5).max().getAsInt();

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main6 {
    public static void main(String[] args) throws IOException {
        System.out.println("[===== 람다식, 스트림 =====]");

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int[] arr = Arrays
                .stream(br.readLine().split(" ")) // 공백을 기준으로 분리
                .mapToInt(Integer::parseInt) // int형으로 형변환
                .sorted() // 오름차순으로 정렬
                .toArray(); // 배열에 담기

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

        int[] oddArr = Arrays
                .stream(br.readLine().split(" ")) // 공백을 기준으로 분리
                .mapToInt(Integer::parseInt) //  int형으로 형변환
                .filter(x -> x % 2 != 0) // 홀수만
                .sorted() //  오름차순으로 정렬
                .toArray(); // 배열에 담기

        for (int num : oddArr) {
            System.out.print(num + " ");
        }
        System.out.println();

        br.close();
    }

}

 

728x90
반응형