JAVA8 Stream 정리 - 스트림 생성 및 filter, map, flatMap 메서드
- 람다 표현식, 메소드 참조에 대한 지식 필요.
List<String> programing =
Arrays.asList("Javascript", "C", "C++", "Nodejs", "Java", "Oracle", "MariaDB", "PHP", "ASP");
// 1-1. Java ~7 에서 필터링 후 카운팅
int count1 = 0;
for (String str : programing) {
if(str.indexOf("Java") > -1){
count1 += 1;
}
}
System.out.println("1-1.count1 = " + count1);
// 1-2 Java8 에서 필터링 후 카운팅
long count2 = programing.stream()
.filter(str -> (str.indexOf("Java") > -1))
.count();
System.out.println("1-2.count2 = " + count2);
// 1-3 Java8 에서 필터링 후 카운팅을 병렬로 수행
long count3 = programing.parallelStream()
.filter(str -> str.indexOf("Java") > -1)
.count();
System.out.println("1-3.count3 = " + count3);
// 2.Stream 생성
// 공백을 붙여서 하나의 스트링으로 만듬
String contents = programing.stream()
.collect(Collectors.joining(" "));
// 공백별로 잘라서 String[]배열을 반환
Stream<String> splitStr = Stream.of(contents.split(" "));
System.out.print("\n2.splitStr :");
splitStr.forEach(str -> System.out.print("[" + str + "]"));
// 3-1. filter
// filter 메서드의 인자는 Predicate<T>
// T 타입를 받아서 Boolean 타입을 리턴
System.out.print("\n3-1.filter(str.length > 3) :");
programing.stream()
.filter(str -> str.length() > 3)
.forEach(str -> System.out.print("[" + str + "]"));
// 3-2. map
// stream에 들어있는 값을 변환하고 싶을때 사용
// toUpperCase : 문자를 대문자로 변환
System.out.print("\n3-2.map(toUpperCase) :");
programing.stream()
.map(String::toUpperCase)
.forEach(str -> System.out.print("[" + str + "]"));
// 3-3. flatMap
// Stream의 문자열을 나열 :
// map으로 구현시 [[[C],[+],[+]],[[P],[H],[P]],[[A],[S],[P]]]으로 출력
// flatMap으로 구현시 [C][+][+][P][H][P][A][S][P]으로 출력
System.out.print("\n3-3.flatMap() :");
programing.stream()
.filter(str -> str.length() == 3)
.flatMap(str -> {
List<String> result = new ArrayList<>();
for(int i=0; i < str.length(); i++){
result.add(str.substring(i, i + 1));
}
return result.stream();
})
.forEach(str -> System.out.print("[" + str + "]"));
결과 출력 :
1-1.count1 = 2
1-2.count2 = 2
1-3.count3 = 2
2.splitStr :[Javascript][C][C++][Nodejs][Java][Oracle][MariaDB][PHP][ASP]
3-1.filter(str.length > 3) :[Javascript][Nodejs][Java][Oracle][MariaDB]
3-2.map(toUpperCase) :[JAVASCRIPT][C][C++][NODEJS][JAVA][ORACLE][MARIADB][PHP][ASP]
3-3.flatMap() :[C][+][+][P][H][P][A][S][P]
'개발' 카테고리의 다른 글
[PHP] Zend Opcache 설치 및 사용 (0) | 2016.08.29 |
---|---|
[Java8] Stream - 무한 스트림 생성, 결합, 중복요소제거, 정렬, peek (0) | 2016.08.17 |
[sitemesh] Spring - sitemesh 설정 (7) | 2016.06.30 |
[Bootstrap] 반응형 웹 부트스트랩 다운로드 (0) | 2016.06.29 |
[STS] 서버 및 스프링 프로젝트 생성 (0) | 2016.06.28 |