자바/자바 입문 공부일지

자바 기초 공부 일지 51. 리덕션, 맵핑Mapping (Map, faltMap) (작성중)

Tomitom 2022. 11. 7. 15:38
반응형

리덕션(Reduction)  데이터를 축소하는 연산 입니다. 

T reduce(T identity, BinaryOperator<T> accumulator)    // Stream<T>에 존재합니다. 

    // BinaryOperator<T>    T apply(T t1, T t2)

 

리덕션은 두 개의 인수를 받은 후에 그에 따른 결과를 반환합니다. 

그 연산식은 마치 토너먼트처럼 보이는데요. 

앞의 값과 비교를 한 후에 축소 진행 중인 상태의 하나의 요소 결과값을 반환합니다. 

 

 

 

출처 : 윤성우의 열혈 자바 프로그래밍

public static void main(String[] args) {

   List<String> ls   =  Arrays.asList("Box", "Simple", "Complex", "Robot");

   BinaryOperator<String> lc = (s1, s2) -> {

      if(s1.length() > s2.length())

         return s1;

      else

         return s2;

   };

   String str = ls.stream()

                  .reduce("", lc); // 스트림 빈 경우 "" 반환   // 1. 스트림이 비어있을 때 반환하는 역할

                         2. data 1, 2, 3, 4 의 맨 앞에 추가되는 데이터

    System.out.println(str);

}

 

reduce 의 역할은 다음과 같습니다. 

 

A B C D

이렇게 알파벳 네 개의 데이터가 있는 배열이 있을 때 

 

reduce('E', ___) -> 의 경우 맨 앞에 있는 자료인 E가 배열의 앞에 자리하게 됩니다. 

 

 

package day21;

import java.util.*;
import java.util.function.*;

public class Reduce01 {

	public static void main(String[] args) {
		
		List<String> lst = Arrays.asList("oh","good","bad","happy"); 

		// 1. 스트림이 비어 있을 때의 최종 대체제 역할 
		// 2. 스트림의 맨 앞에 추가된 또 하나의 멤버 역할
		
		String result = lst.stream().reduce("very nice", (s1, s2)->{
		if(s1.length() > s2.length()) {return s1;}
		else {return s2;}

	});
		
		System.out.println(result);
	}
}


 

 

map : 스트림의 개별 요소에 대해 순서대로 어떤 작업을 수행한 후에, 작업 결과물을 반환한다.

반환된 자료들은 다시 하나의 스트림을 형성하게 된다. 

 

 

flatMap : 스트림의 개별 요소에 대해 순서대로 어떤 작업을 수행한 후에, 작업 결과물을 스트림으로 반환한다. 

반환된 스트림들은 다시 이어져서 하나의 스트림을형성하게 된다. 

 

 

 

 

package day21;

import java.util.Arrays; 
import java.util.stream.Stream;

public class FlatMap {
	public static void main(String[] args) {
		
		Stream<String> ss1 = Stream.of("나의 인생","너의 삶"); 
		Stream<String> ss2 = ss1.flatMap(s -> Arrays.stream(s.split(" "))); 
		ss2.forEach(s -> System.out.print(s + "\t")); 
		
		System.out.println();
	}

}

 

반응형