[JAVA Stream] 3. 최종 연산자

준커·2023년 5월 2일
1

JAVA 8

목록 보기
3/5
post-thumbnail

최종 연산자

1. allMatch()

allMatch(Predicate<? super T> predicate)

정보

  • 반환값 : boolean
  • 기능 : Stream의 모든 요소가 주워진 조건과 일치하는지 판단.

예제 코드

  • 인풋

    List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
    List<Integer> list2 = Arrays.asList(2, 4, 6, 8);
  • 최종연산자

    boolean result1 = list1.stream()
                                .allMatch(num -> num % 2 == 0);
    
    boolean result2 = list2.stream()
                                    .allMatch(num -> num % 2 == 0);
  • 아웃풋

    System.out.println("result1 : " + result1);
    System.out.println("result2 : " + result2);
    
  • 결과

2. anyMatch()

anyMatch(Predicate<? super T> predicate)

정보

  • 반환값 : boolean
  • 기능 : Stream의 요소중 단 1개이상 주워진 조건과 일치하는지 판단.

예제 코드

  • 인풋

    List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
  • 최종연산자

    boolean result1 = list1.stream()
                                .anyMatch(num -> num % 2 == 0);
  • 아웃풋

    System.out.println("result1 : " + result1);
    
  • 결과

3. noneMatch()

noneMatch(Predicate<? super T> predicate)

정보

  • 반환값 : boolean
  • 기능 : Stream의 요소들이 주워진 조건과 일치하지 않는지를 판단.

예제 코드

  • 인풋

    List<Integer> list1 = Arrays.asList(1, 3, 5, 7);
    List<Integer> list2 = Arrays.asList(2, 4, 6, 7);
  • 최종연산자

    boolean result1 = list1.stream()
                                .noneMatch(num -> num % 2 == 0);
    
    boolean result2 = list2.stream()
                                    .noneMatch(num -> num % 2 == 0);
  • 아웃풋

    System.out.println("result1 : " + result1);
    System.out.println("result2 : " + result2);
    
  • 결과

4. collect()

collect(Collector<? super T, A, R> collector)
collect(Collector<Supplier supplier, BiConsumer<R,? super T) accumulator, BisConsumer<R,T> combiner)

정보

  • 반환값 :
  • 기능 : Stream을 내부의 Collector를 통해 원하는 Collections 형태로 변경해줌.

예제 코드

  • 인풋
    Stream<Integer> stream = Stream.of(1, 2, 3, 4);
  • 최종연산자
    List<Integer> list = stream.collect(Collectors.toList());
  • 아웃풋
    list.forEach(System.out::println);
  • 결과

Collectors는 공식문서에서 확인하실 수 있습니다.
java.util.stream.Collectors

5. count()

정보

  • 반환값 : long
  • 기능 : Stream의 요소의 개수 값을 반환.

예제 코드

  • 인풋

    List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
  • 최종연산자

    long result = list1.stream().count();
  • 아웃풋

    System.out.println(result);
  • 결과

6. findAny()

findAny()

정보

  • 반환값 : Optional<T>
  • 기능 : Stream의 요소 중 1개를 찾는 기능.

예제 코드

  • 인풋

    List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
  • 최종연산자

    Optional<Integer> result = list1.stream().findAny();
    
  • 아웃풋

    System.out.println(result.get());
  • 결과

7. findFirst()

findFirst()

정보

  • 반환값 : Optional<T>
  • 기능 : Stream의 가장 첫번째 요소를 찾는 기능.

예제 코드

  • 인풋

    List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
  • 최종연산자

    Optional<Integer> result = list1.stream().findFirst();
    
  • 아웃풋

    System.out.println(result.get());
  • 결과

findAny()와 findFirst()의 차이가 뭐야??

1. findAny(): Stream 중 1개를 찾는 기능
2. findFirst(): Stream 중 1번째 요소를 찾는 기능
  • 둘의 차이점은 병렬처리시 나타납니다.

예제 코드

  • 인풋

    List<Integer> list1 = IntStream.range(1, 100)
    									.boxed()
    									.collect(Collectors.toList());
  • 최종 연산자

    Optional<Integer> result = list1.stream()
                    .parallel()
                    .filter(num -> num % 2 == 0)
                    .findAny();
  • 아웃풋

    System.out.println(result.get());
  • 결과

    findAny()를 사용했을 경우 가장 첫번째 요소인 2를 검색하지 않는 모습입니다.

  • 인풋
    동일

  • 최종 연산자

    Optional<Integer> result = list1.stream()
                    .parallel()
                    .filter(num -> num % 2 == 0)
                    .findFirst();

    -결과

findFirst()를 사용했을 경우 가장 첫번째 요소인 2를 검색하는 모습입니다.

8. forEach()

forEach(Consumer<? super T> action)

정보

  • 반환값 : void
  • 기능 : Stream의 요소 만큼 반복하는 기능.

예제 코드

  • 인풋

    List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
  • 최종연산자

    list1.stream().forEach(num -> System.out.println(num));
  • 결과

9. forEachOrdered()

forEachOrdered(Consumer<? super T> action)

정보

  • 반환값 : void
  • 기능 : 병렬 처리 시 정렬된 상태로 반복되는 것을 보장함.

예제 코드

  • 인풋

    List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
  • 최종연산자 -> forEach 사용

    list1.stream()
          .parallel()
          .forEach(System.out::println);
  • 결과

  • 최종연산자 -> forEachOrdered 사용

    list1.stream()
          .parallel()
          .forEachOrdered(System.out::println);
  • 결과

10. max()

max(Comparator<? super T> comparator)

정보

  • 반환값 : Optinal<T>
  • 기능 : Stream의 요소 중에 조건을 통해 가장 큰 값을 찾는 기능.

예제 코드

  • 인풋

     List<String> words = Arrays.asList("a", "bb", "ccc", "dddd", "eeeee");
  • 최종연산자

    Optional<String> maxLength = words.stream()
                    .max(Comparator.comparingInt(String::length));
    
  • 아웃풋

    System.out.println("가장 긴 문자열: " + maxLength.get());
  • 결과

11. min()

min(Comparator<? super T> comparator)

정보

  • 반환값 : Optinal<T>
  • 기능 : Stream의 요소 중에 조건을 통해 가장 작은 값을 찾는 기능.

예제 코드

예제 코드

  • 인풋

     List<String> words = Arrays.asList("a", "bb", "ccc", "dddd", "eeeee");
  • 최종연산자

    Optional<String> minLength = words.stream()
                    .min(Comparator.comparingInt(String::length));
    
  • 아웃풋

    System.out.println("가장 작은 문자열: " + minLength.get());
  • 결과

Comparator은 공식문서에서 확인하실 수 있습니다.
java.util.Comparator

12. reduce()

reduce(T identity, BinaryOperator accumulator)
reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)

정보

  • 반환값 : T
  • 기능 : 여러개의 요소를 하나의 단일 값으로 반환하느 기능

예제 코드

  • 인풋

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
  • 최종연산자

    int sum = numbers.stream().reduce(0, (a, b) -> a + b);
  • 아웃풋

    System.out.println(sum);
  • 결과

  • reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)는 병렬 Stream에서 사용가능한 reduce()

  • 인풋

    List<String> strings = Arrays.asList("one", "two", "three", "four");
  • 최종연산자

    String result = strings.parallelStream()
    							.reduce("", (s1, s2) -> s1 + s2, (s1, s2) -> s1 + s2);
  • 아웃풋

    System.out.println(result); 
  • 결과
    업로드중..

13. toArray()

toArray()
toArray(IntFunction<A[]> generator)

정보

  • 반환값 : 각각 T[], Object[]
  • 기능 : 특정 타입의 배열로 변환한다.

예제 코드

  • 인풋

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
  • 최종연산자

    Object[] number1 = numbers.stream().toArray();
    Integer[] number2 = numbers.stream().toArray(Integer[]::new);
    
  • 아웃풋

    Arrays.stream(number1).forEach(System.out::println);
    System.out.println("=====");
    Arrays.stream(number2).forEach(System.out::println);
  • 결과
    업로드중..

반환되는 배열의 타입을 지정해줄지, Object타입으로 둘지의 차이이다.

profile
학부생일뿐

0개의 댓글