본문 바로가기

Algorithm/JAVA

[lambda] forEach(), map(), filter(), reduce()

java8에 추가된 lambda식에 보면 자바스크립트의 ES6의 배열 메서드들과 유사한 메서들이 존재한다.

  • forEach() : 리스트를 순회한다.
  • map() : 가공해서 반환할 수 있다.
  • filter() : 필터링한 값을 반환 한다.
  • reduce() : 매개변수 넣은 값과 콜백함수에서 연산한 값을 반환한다.
    • 자바스크립트 reduce랑 사용법이 다르지만 연산처리 할 수 있는건 공통점이다.
public class ListStream {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);

        System.out.print("5보다 큰 수만 filter : ");
        list.stream().filter(v -> v > 5).forEach(v -> System.out.print(v + ", "));
          // 5보다 큰 수만 filter : 6, 7, 8, 9, 10, 
        System.out.println("");

        System.out.print("2배수로 곱한 수 map : ");
        list.stream().map(v -> v * 2).forEach(v -> System.out.print(v + ", "));
         // 2배수로 곱한 수 map : 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 
        System.out.println("");

        int sum = list.stream().reduce(0, (a, b) -> a + b);
        System.out.println("합계: "+sum); 
          // 합계: 55
    }
}

자바랑 같은 결과를 출력하는 자바스크립트

const list = [1,2,3,4,5,6,7,8,9,10];

const result_filter = list.filter(v => v > 5);
console.log("5보다 큰 수만 filter : ", result_filter));
// [6, 7, 8, 9, 10]

const result_map = list.map(v => v * 2)
console.log("2배수로 곱한 수 map : ", result_map);
// [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

const result_reduce = list.reduce((tot, val, idx, arr) => tot += val, 0);
console.log("합계 : ", result_reduce);

카테고리 만들어놓고 포스팅을 하도 안한게 뻘쭘해서 작성(...)