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);
카테고리 만들어놓고 포스팅을 하도 안한게 뻘쭘해서 작성(...)