자바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]
자바 스트림을 사용하는 간단한 예제를 알아보았습니다.
'Java' 카테고리의 다른 글
[Java]자바 진수변환(10진수->2진수,8진수,16진수) (0) | 2019.03.05 |
---|---|
[Java]자바 현재 날자,시간 출력(SimpleDateFormat) (0) | 2019.02.21 |
[Java]자바 UUID 생성 (=GUID) (0) | 2019.02.11 |
[Java]자바 임포트(import)받은 클래스명이 겹칠때 (0) | 2019.01.25 |
[Java]자바 디렉토리 제거(하위파일,폴더 모두 삭제) (2) | 2018.07.03 |