[Java] Java Stream

jy9922·2022년 8월 4일
0

Java

목록 보기
7/13
post-thumbnail

Java 8부터 Stream을 이용하여 람다함수형식으로 배열의 요소들을 처리가 가능해졌다.

🔸 배열의 원소를 가공하는 방법

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

🔹 map

요소들을 특정조건에 해당하는 값을 변환
ex. 대/소문자 변형 등의 작업을 하고 싶을 때 사용 가능

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

// Collectors.joining을 이용해 출력
System.out.pritln(list.stream().map(s->s.toUpperCase()).collect(Collectors.joining(" ")));
// APPLE BANANA MELON

// Collctors.toList를 이용해 출력 -> String 리턴
System.out.println(list.stream().map(s->s.toUpperCase()).collect(Collectors.toList()));
[APPLE, BANANA, MELON]

// forEach를 이용해 출력 -> 리스트 리턴
list.stream().map(String :: toUpperCase).forEach(s -> System.out.println(s));
//APPLE
//BANANA
//MELON

🔹 filter

filter는 요소를 특정 기준으로 걸러냄
ex. 요소의 크기가 5이상인 값 반환

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

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

🔹 sorted

리스트의 요소를 정렬

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

🔸 findAny( ) 와 findFirst( )

  • Stream에서 어떤 조건에 일치하는 요소를 1개를 찾았을 때, 사용하는 API
  • 두 API는 Stream을 직렬로 처리했을 땐, 차이가 없으나 Stream을 병렬로 처리했을 때 차이가 있다.

🔹 findAny( )

  • Stream에서 가장 먼저 탐색되는 요소를 리턴한다.
  • Multi thread에서 stream을 처리할 때 가장 먼저 찾은 요소를 리턴한다.
    • 실행할 때마다 리턴값이 달라지며, b 혹은 b1을 리턴한다.
List<String> elements = Arrays.asList("a", "a1", "b", "b1")

// parallel()로 stream 병렬처리
Optional<String> firstElement = element.stream().parallel()
		 .filter(s -> s.startsWith("b"))
         .findAny();
System.out.println("findAny: " + firstElement.get());

// findAny: b1 혹은 findAny: b

🔹 findFirst( )

  • 조건에 일치하는 요소들 중 Stream에서 순서가 가장 앞에 있는 요소 리턴
  • 여러 요소가 조건에 부합해도 Stream의 순서를 고려하여 가장 앞에 있는 요소를 리턴한다.
    • 조건에 일치하는 element 1개를 Optional로 리턴한다.
    • 조건에 일치하는 요소가 없다면 emplty가 리턴된다.
List<String> elements = Arrays.asList("a", "a1", "b", "b1")

// parallel()로 stream 병렬처리
Optional<String> firstElement = element.stream().parallel()
		 .filter(s -> s.startsWith("b"))
         .findFirst();
System.out.println("findFrist: " + firstElement.get());

// findFirst: b

0개의 댓글