티스토리 뷰



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]




댓글