본문으로 바로가기

[Java]자바 스트림Stream(map,filter,sorted / collect,foreach)

category Java 2019. 2. 15. 10:00

자바8부터 Stream 을 사용 할 수 있습니다.


기존에 자바 컬렉션이나 배열의 원소를 가공할떄, for문, foreach 등으로 원소 하나씩 골라내여 가공을 하였다면,


Stream 을 이용하여 람다함수형식으로 간결하고 깔끔하게 요소들의 처리가 가능g.



스트림 사용법을 간단하게 알아보겠습니다.



배열의 원소를 가공하는데 있어

map, filter, sorted 등 이 있습니다.


map은 요소들을 특정조건에 해당하는 값으로 변환해 줍니다.

요소들을 대,소문자 변형 등 의 작업을 하고 싶을떄 사용 가능 합니다.


filter는 요소들을 조건에 따라 걸러내는 작업을 해줍니다.

길이의 제한, 특정문자포함 등 의 작업을 하고 싶을때 사용 가능합니다.


sorted는 요소들을 정렬해주는 작업을 해줍니다.


요소들의 가공이 끝났다면 리턴해줄 결과를 collect 를 통해 만들어줍니다. 




TEST SET


ArrayList<string> list = new ArrayList<>(Arrays.asList("Apple","Banana","Melon","Grape","Strawberry"));

System.out.println(list);

//[Apple, Banana, Melon, Grape, Strawberry]


map


list.stream().map(s->s.toUpperCase());
list.stream().map(String::toUpperCase);


리스트의 요소들을 대문자로 변경해줍니다.


요소들을 대문자로 가공하였다면 collect 를 이용하여 결과를 리턴받을 수 있고, forEach 를 이용하여 바로 출력해볼수 있습니다.

System.out.println(list.stream().map(s->s.toUpperCase()).collect(Collectors.joining(" "))); //APPLE BANANA MELON GRAPE STRAWBERRY

System.out.println(list.stream().map(s->s.toUpperCase()).collect(Collectors.toList())); //[APPLE, BANANA, MELON, GRAPE, STRAWBERRY]
System.out.println(list.stream().map(String::toUpperCase).collect(Collectors.toList())); //[APPLE, BANANA, MELON, GRAPE, STRAWBERRY]

list.stream().map(String::toUpperCase).forEach(s -> System.out.println(s));
//APPLE
//BANANA
//MELON
//GRAPE
//STRAWBERRY

Collectors.joining 을 이용해 리스트를 조인의 기준으로 배치 할 수 있습니다. String 으로 리턴합니다.


Collectors.toList 를 이용해 리스트로 리턴 받을 수 있습니다.


forEach 요소마다 각각 작업을 할 수 있습니다.



filter


list.stream().filter(t->t.length()>5)

filter 는 요소를 특정 기준으로 걸러낼 수 있습니다.


요소의 크기가 5이상인 값만 뽑아냅니다.

System.out.println(list.stream().filter(t->t.length()>5).collect(Collectors.joining(" "))); //Banana Strawberry

System.out.println(list.stream().filter(t->t.length()>5).collect(Collectors.toList())); //[Banana, Strawberry]

마찬가지로 filter로 가공한 결과를 얻을 수 있습니다.



sorted


list.stream().sorted()

리스트의 요소를 정렬합니다.


System.out.println(list.stream().sorted().collect(Collectors.toList())); //[Apple, Banana, Grape, Melon, Strawberry] 



자바 스트림을 사용하는 간단한 예제를 알아보았습니다.