1 분 소요

람다와 스트림

람다 표현식

: 메서드 없이 식으로 표현하는 것.

[일반적인 java 메서드]
반환타입 메서드이름 (매개변수) {
	실행문
}

[람다 표현식]
(매개변수) -> {실행문}
interface Cal {
    public abstract int sum (int a, int b);
}

public class Test {
    public static void main(String[] args) {
        // [일반식]
        Cal c = new Cal() {
            public int sum(int a, int b) {
                return a + b;
            }
        }
        System.out.println(c.sum(1,2));
        // [람다표현식]
        Cal c = (a, b) -> {return a+b;};
        System.out.println(c.sum(1,2));
    }
}
  • 장점: 간결해짐
  • 단점:
    1. 재사용 불가
    2. 인터페이스에 메서드가 2개 이상인 경우 사용 불가

스트림

: 배열, 컬렉션 등의 데이터를 하나씩 참조하여 처리하는 기능을 가진 클래스

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

1) 스트림 생성

  1. 배열 스트림

    String[] str = new String[]{"A", "B", "C"};
    Stream stream = Arrays.stream(str);
    
  2. 컬렉션 스트림

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

    Stream streamBuilder = Stream.builder().add(1).add(2).add(3).build();
    // 1,2,3을 순서대로 추가하기.
    
  4. streamGenerate

    Stream streamGenerate = Stream.generate( () -> "123" ).limit(3);
    // 결과물은 총 3개. 123을 반복.
    
  5. streamIterate

    Stream streamIterate = Stream.iterate(10, n->n*2).limit(3);
    // 결과물은 총 3개. 초기값 10, 그리고 다음 값은 2배씩.
    
  6. range

    IntStream intstream = IntStream.range(1, 5);
    // 1~4까지 정수데이터 추가
    

2) 중개연산

  1. filter: 조건에 맞는 요소 추출

    IntStream intStream = IntStream.range(1,10).filter(n->n%2==0);
    // 1~9까지 수 중에서 2로 나눈 나머지가 0인 데이터 추출
    // 2, 4, 6, 8이 추출
    
  2. map: 연산을 요소별로 수행

    IntStream intStream = IntStream.range(1,10).map(n->n+1);
    // 1~9까지 맵에 들어있는 수들을 각 요소별로 1씩 더하기
    // 2~10까지로 바뀜
    
  3. sort

    IntStream intStream = IntStream.builder().add(5).add(3).add(1).add(2).add(4).build();
    IntStream intSort = intStream.sorted();
    // intSort에 1~5까지 오름차순으로 정렬
    

3) 최종연산

  1. Sum, Average

    int sum = IntStream.range(1,5).sum();
    // 10
    double avg = IntStream.range(1,5).average().getAsDouble();
    // 2.5
    
  2. Min, Max

    int min = IntStream.range(1,5).min().getAsInt();
    // 1
    int max = IntStream.range(1,5).max().getAsInt();
    // 4
    
  3. reduce

    Stream<Integer> stream = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5)).stream();
    System.out.println(stream.reduce((x, y) -> x+y).get());
    // 15 (1+2=3, 3+3=6, 6+4=10, 10+5=15)
    
  4. forEach

    IntStream.range(1,10).filter(n->n==5).forEach(System.out::println);
    // 5
    // .forEach( n -> System.out.println(n + ",");
    // 이런식으로 출력 형태도 만들어 줄 수 있음.
    

    *스트림은 최종연산을 만나면 최종연산 후 더 이상 스트림유지를 할 수 없음.


마지막 수정일시: 2022-05-30 14:32

카테고리:

업데이트:

댓글남기기