인생은 속도가 아니라 방향이다

[Java] Stream 클래스를 알아보자 ② 본문

백엔드(Back-end)/Java

[Java] Stream 클래스를 알아보자 ②

기록하는 동구 2020. 1. 30. 13:12
반응형

생성하기

 

스트림을 이용하려면 먼저 생성을 해야합니다. 스트림은 배열 또는 컬렉션 인스턴스를 이용해서 생성할수있습니다.

 

1.배열스트림

  •  배열일 경우 Arrays.stream 메소드를 사용합니다. (
1
2
    String[] array= {"a","b","c"};
    Stream<String> stream=Arrays.stream(array);

 

2.컬렉션스트림

  • 컬렉션 타입(Collection,List,Set)의 경우에는 메소드 stream()을 이용해서 스트림을 만들수있습니다.
1
2
    List<String> fruits=Arrays.asList("Apple""Banana","Grape","GrapeFruit","Melon""WaterMelon");
    Stream<String> streamFruits=fruits.stream();
 

가공하기

스트림을 만들었다면 이제 입맛대로 가공을 해볼까요? 파이프라인에서 밸브(메소드)같은 존재입니다. 여러가지 밸브가 있는데 하나씩 소개해드리겠습니다.

 

1.Filtering

필터는(filter) 스트림 내 요소들을 하나씩 평가해서 걸러내느 작업입니다. 인자로 받는 Predicate는 boolean을 리턴하는 함수형 인터페이스로 평가식이 들어가게 됩니다. 예제를 보여드릴게요

 
1
2
    List<String> fruits=Arrays.asList("Apple""Banana","Grape","GrapeFruit","Melon""WaterMelon");
    Stream <String> streamFruit=fruits.stream().filter(fruit -> fruit.indexOf("Melon")> -1); // Melon, WaterMelon

두번째줄 코드를 읽어보면 filter로 하나씩거르면서 Melon문자열이 포함된 문자들을 뽑아내서 스트림배열안에 집어넣어라. 이제 이해가 되시나요?

 

 

2.Mapping

두번째는 Mapping인데 맵(map)은 스트림 내 요소들은 하나씩 특정 값으로 변환해줍니다. 이때 값을 변환하기 위한 람다를 인자로 받습니다.  스트림에 들어가있는 값이 input되고 람다식을 걸쳐서 output이 리턴되어 새로운 스트림에 담기게 됩니다. 이러한 과정을 mapping이라고 합니다. 이번에도 예제로 알아보죠.

1
2
3
List<String> fruits=Arrays.asList("Apple""Banana","Grape","GrapeFruit","Melon""WaterMelon");
    Stream<String> streamFruit=fruits.stream().map(fruit -> fruit.toUpperCase());
    //APPLE BANANA GRAPE GRAPEFRUIT MELON WATERMELON
 
 

자,  stream().map(fruit -> fruit.toUppderCase()) 를 통해 기존 스트림값들을 대문자로 변환해서 담긴 스트림을 리턴했습니다.

 

다음처럼 요소 내 들어있는 Member객체의 memberName값들을 꺼내올수도 있습니다. 각 'Member'를 'memberName'으로 맵핑한다고 생각하면 쉽습니다.

1
2
3
    Member[] memberarr= {new Member("강동현"), new Member("유희라"), new Member("강인구"), new Member("윤미자")};
    List<Member> memberList=Arrays.asList(memberarr);
    Stream<String> streamMember=memberList.stream().map(Member::getMemberName); // 강동현 유희라 강인구 윤미자

 

 

 

이후 flatMap....sorting은 나중에시간이 날때 이어서 포스팅하도록하겠다..... 힘들다 ㅠ

 

References:

 

https://effectivesquid.tistory.com/entry/Java-Stream%EC%9D%B4%EB%9E%80

 

반응형
Comments