Languege/Java & Spring / / 2023. 11. 15. 17:32

Stream 사용법

💥 개요

우테코 3주차 코드리뷰 진행 중 Lotto를 파라미터로 받은 개수만큼 새로운 객체를 생성하는 코드를 만드는데, 더 좋은 코드를 추천해주셔서 Stream의 활용과 심화에 대해 알아야겠다. 라고 생각했다.

 

1. Stream 생성하기

Java에서 Stream을 생성하는 방법은 다양합니다. 컬렉션, 배열, 특정 범위의 숫자 등에서 Stream을 생성할 수 있습니다.

List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();

2. Stream 가공하기(중간연산)

Stream을 가공하는 중간 연산에는 여러 가지가 있습니다. 이들은 Stream을 변형하지만, 최종 연산이 호출되기 전까지는 실행되지 않습니다.

[ 필터링 - Filter ]

특정 조건에 맞는 요소만 추출합니다.

stream.filter(s -> s.startsWith("a"));

[ 데이터 변환 - Map ]

각 요소에 함수를 적용하여 변환합니다.

stream.map(String::toUpperCase);

[ 정렬 - Sorted ]

주어진 Comparator에 따라 Stream의 요소를 정렬합니다.

stream.sorted(Comparator.naturalOrder());

[ 중복 제거 - Distinct ]

중복된 요소를 제거합니다.

stream.distinct();

[ 특정 연산 수행 - Peek ]

각 요소에 대해 추가적인 연산을 수행합니다. 주로 디버깅에 유용합니다.

stream.peek(System.out::println);

[ 원시 Stream <-> Stream ]

기본형 타입의 Stream과 객체형 Stream 간의 변환입니다.

IntStream intStream = stream.mapToInt(String::length);

3. Stream 결과 만들기(최종 연산)

Stream의 최종 연산으로 결과를 도출합니다. 이 연산을 수행한 후에는 Stream을 재사용할 수 없습니다.

[ 최댓값/최솟값/총합/평균/갯수 - Max/Min/Sum/Average/Count ]

Stream의 요소에 대한 다양한 통계를 제공합니다.

stream.count();

[ 데이터 수집 - collect ]

Stream의 요소를 다양한 방식으로 수집합니다.

1. Collectors.toList()

stream.collect(Collectors.toList());

2. Collectors.joining()

stream.collect(Collectors.joining(", "));

3. Collectors.averagingInt(), Collectors.summingInt(), Collectors.summarizingInt()

stream.collect(Collectors.averagingInt(String::length));

4. Collectors.groupingBy()

stream.collect(Collectors.groupingBy(String::length));

5. Collectors.partitioningBy()

stream.collect(Collectors.partitioningBy(s -> s.length() > 2));

[ 조건 검사 - Match ]

특정 조건이 Stream의 모든 요소에 대해 참인지, 하나라도 참인지, 모두 거짓인지 검사합니다.

stream.allMatch(s -> s.contains("a"));

[ 특정 연산 수행 - forEach ]

각 요소에 대해 연산을 수행합니다.

stream.forEach(System.out::println);

 

 

출처

https://mangkyu.tistory.com/114

 

[Java] Stream API의 활용 및 사용법 - 기초 (3/5)

1. Stream 생성하기 앞서 설명한대로 Stream API를 사용하기 위해서는 먼저 Stream을 생성해주어야 한다. 타입에 따라 Stream을 생성하는 방법이 다른데, 여기서는 Collection과 Array에 대해서 Stream을 생성하

mangkyu.tistory.com