Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- window
- NPM
- GIT
- R
- Kotlin
- Sqoop
- 공정능력
- JavaScript
- xPlatform
- hadoop
- mapreduce
- es6
- Express
- Java
- Android
- Eclipse
- table
- plugin
- tomcat
- react
- Python
- SPC
- SSL
- MSSQL
- SQL
- vaadin
- mybatis
- IntelliJ
- Spring
- 보조정렬
Archives
- Today
- Total
DBILITY
java lambda map,reduce,filter summary 본문
반응형
java8에 추가된 stream을 이용해 보자.
MapReduce에선 mapper에서 한줄씩 읽어 조건에 맞는 데이터 처리등 transform을 하고 한줄씩 쓰고,
reducer에서 key를 기준으로 reduction,aggregation 즉 집계처리할 수 있는데, 2년전에 해본거라 기억이 가물거리지만ㅎㅎ
stream을 이용하면 map,reduce가 가능하다. 마치 method chain(?)처럼 동작한다.
stream은 일종의 데이터의 순열정도라고 본다.nPr? 아니다. 그냥 순서가 있는 원소의 집합이라고 해야 할까...
아래 코드는 1~10까지의 정수형 배열의 요소의 합계를 계산하는 것이다.
기록하고 몇번이건 봐야 기억할 수 있다.피곤하다.
package com.dbility.bigdata.lambda.test;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Test03 {
public static void main(String[] args) {
Integer[] array = new Integer[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
// for loop sum
System.out.println(String.format("for loop sum : %d",sum));
sum = 0;
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
sum+=iterator.next();
}
// iterator sum
System.out.println(String.format("iterator sum : %d",sum));
// stream은 collection 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 internal iterator
sum = list.stream().mapToInt(x -> x).sum();
System.out.println(String.format("intStream sum : %d",sum));
// 하나로 합침.MapReduce Reducer ?
sum = list.stream().reduce((x, y) -> x + y).get();
System.out.println(String.format("stream reduce sum : %d",sum));
//for loop를 돌면서 Each 각각, 아래 4개는 동일한 출력
list.stream().forEach(System.out::println);// 정적메서드 참조시 클래스명::메서드
list.stream().forEach((Integer x)->{ System.out.println(String.format("%d", x));});
list.stream().forEach((x)->{ System.out.println(String.format("%d", x));});
list.stream().forEach(x->{ System.out.println(String.format("%d", x));});
// 1. 입력을 출력으로 매핑하거나 변경할때(요소수 변경없음,MapReduce의 Mapper?)
list.stream().map(x -> x * 2).forEach((x)->System.out.println(x));
// 2. 조건에 의해 요소 필터링
list.stream().filter(x -> x >= 5).forEach(System.out::println);
// 3. 하나로 합침.MapReduce Reducer ?
System.out.println(list.stream().reduce((x, y) -> x + y).get());
// 1.2.3을 chainning
Integer j = list.stream().map(x -> x * 2)
.filter(x -> x >= 5)
.reduce((x, y) -> x + y)
.get();
System.out.println(j);
}
}
반응형
'java > basic' 카테고리의 다른 글
generic type의 사용 이유 (0) | 2018.05.28 |
---|---|
java lambda stream 실습 (0) | 2018.05.27 |
java lambda (0) | 2018.05.25 |
maven uber-jar packaging (0) | 2018.04.30 |
maven build war package exclude paths or files ( 특정 경로 제외 ) (0) | 2018.04.11 |
Comments