Stream으로 데이터를 가공해보자!

지인호·2021년 6월 11일
3

자바 Stream

목록 보기
3/4
post-thumbnail

I need a technique for changing a string stream to UpperCase XD

😄 스트림의 주요기능 "데이터 가공"

지난시간에는 스트림을 어떻게 생성하는지 알아보았습니다!
그렇다면, 이제 스트림을 사용해보아야겠죠?
그래서 오늘은 Stream 을 효과적으로 사용하는 방법을 알아보도록 하겠습니다!

지금부터 나오는 모든 예제는 다음 코드를 내장하고있는것으로 가정합니다!

List<String> list = Arrays.asList("spring", "react", "node", "view");

스트림끼리 서로 연결해보자! Stream.concat()

Stream<String> streamA = Stream.of("Java", "Kotlin", "Scala", "Groovy");
Stream<String> streamB = Stream.of("C", "C++", "C#");
Stream<String> concatStream = Stream.concat(streamA, streamB);
//concatStream : "Java", "Kotlin", "Scala", "Groovy", "C", "C++", "C#"

Stream의 static 메서드인 concat 을 이용하면 두 스트림을 연결한 새로운 스트림을 만들 수 있습니다!

스트림의 거름망! Stream.filter()

Stream<String> iFramework = list.stream()
	.filter(framework -> framework.contains("i"));
//iFramework : "spring", "view"

filter 메서드는 boolean 을 리턴하는 함수형 인터페이스, Predicate 를 인자로 받아서, 요소를 Predicate의 함수에 넣었을때, true 를 반환하는 요소 즉, 검사식을 통과한 요소만으로 새로운 스트림을 만들어 반환합니다!

새로운 스트림으로 변신하고싶다면? Stream.map()

Stream<String> stream = list.stream()
	.map(String::toUpperCase);
//stream : "SPRING", "REACT", "NODE", "VIEW"

map 메서드는 스트림의 요소들을 하나씩 다른 값으로 변환해주는데요. 원래 값에서 다른 값으로 변하는 규칙을 담은 람다를 인자로 받습니다. 이 람다의 인자로 기존 요소를 넣고 이에대한 반환값으로 인자의 값을 교체합니다!

스트림의 요소들을 정렬해보자! Stream.sort()

Stream<String> alphabetStream = stream.sorted();
Stream<String> lengthStream = stream.sorted(Comparator.comparingInt(String::length));

스트림의 정렬은 리스트의 정렬처럼, Comparator 을 받아서 정렬합니다. (만약, 인자를 보내지 않을경우, 오름차순으로 자동정렬됩니다!)

스트림에도 for each 가 있다면? Stream.foreach()

list.foreach(System.out::print);
//console | springreactnodeview

for 문이나 List 의 for each 처럼, 스트림의 foreach() 메서드는 스트림 내의 요소들을 하나씩 반환합니다. 스트림 내의 요소들을 통해 특정 연산을 수행하고싶을 때 사용하는 메서드입니다!

데이터 가공도 중간점검은 해야지! Stream.peek()

list.peek(System.out::print);
//console | springreactnodeview

스트림 내의 요소들을 통해 특정 연산을 수행하고싶다면, peek 이라는 메서드를 실행하면 됩니다.

잠시만, 이거 for each 아닌가요??

peek 메서드는 foreach 처럼, 모든 요소들을 돌지만, Stream 을 반환하기때문에, 가공 중간에 사용할 수 있다는 장점이 있습니다. (자세한건 메소드 체이닝 패턴을 참고하세요)

지금까지 스트림을 통해 데이터를 가공하는 방법을 알아보았습니다!

다음시간에는 스트림을 통해 최종적으로 결과를 만들어내는 방법을 알아보겠습니다 😆

다들 다음시간에 만나요~~

profile
테오의 스프린트 17기 퍼실리테이터

0개의 댓글