[Java] Stream API

cateto·2021년 1월 11일
0
post-thumbnail
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class FuncTest {
	
	
	public static void main(String[] args) {
		final List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
		final String result = numbers.stream().map(String::valueOf).collect(Collectors.joining(":"));
		
		System.out.println("구분자 붙여서 출력하기 : " + result);
		
		final List<String> strs = Arrays.asList("가", "나", "가나", "가나다");
		final String result2 = strs.stream().filter(t->t.contains("가")).collect(Collectors.joining(", "));
		System.out.println("문자열 포함시 출력하기 : " +result2);
		
		final String result3 = strs.stream().filter(t->t.matches("가")).collect(Collectors.joining(", "));
		System.out.println("문자열과 등가시 출력하기 : " + result3);
		
		final List<String> result4 = strs.stream().sorted().collect(Collectors.toList());
		System.out.println("리스트 요소 정렬하기 : " + result4);
	}
	

}

컬렉션을 사용할 때마다 컬렉션 내부의 데이터에 접근하는 일이 잦았고, 때마다 iterator를 활용하여 재사용이 어려운 코드가 길어졌다. 이 때,
✨Stream 및 함수형 프로그래밍의 공부를 추천받음. 🤞

JAVA8 부터 도입된 Stream API의 특징

  • 단 한번만 사용됨.
    " 함수이지만 값이다."
  • 원본 데이터를 변경하지 않음.
    " 동시참조 등 상황에서의 부작용을 방지할수 있다!"
  • 필터-맵(filter-map) 기반의 API를 사용하여 지연(lazy) 연산을 통해 성능을 최적
    " 결과를 필요로 하기 전까지 실행을 지연하므로 합리적!"
  • 외부 반복을 통해 작업하는 컬렉션과는 달리 내부 반복(internal iteration)을 통해 작업을 수행
    " 외부 iterator와 다르게 내부적으로 JVM, library가 해결.. "

참고 : https://velog.io/@kskim/Java-Stream-API
(매우 정리를 잘해주셔서 bb)
https://homoefficio.github.io/2016/06/26/for-loop-%EB%A5%BC-Stream-forEach-%EB%A1%9C-%EB%B0%94%EA%BE%B8%EC%A7%80-%EB%A7%90%EC%95%84%EC%95%BC-%ED%95%A0-3%EA%B0%80%EC%A7%80-%EC%9D%B4%EC%9C%A0/
(하지만 언제나 함수형 프로그래밍이 답은 아니다.)

profile
Curious for Everything

2개의 댓글

comment-user-thumbnail
2021년 1월 12일

유용한 정보 잘 보고 갑니다~
https://velog.io/@gillog/Java-Stream-Class
여기에도 Stream 관련 정리가 잘 돼있습니다 ㅋㅋㅋ

1개의 답글