Java 8에서 도입된 SummaryStatistics는 count, min, max, sum average 등의 statistics 정보를 계산해주는 클래스입니다. 그리고 스트림과 함께 사용할 수 있습니다.
SummaryStatistics는 Int, Long, Double 자료형을 지원하는 아래 클래스들을 사용할 수 있습니다. 아래와 같이 지원하는 자료형마다 클래스 이름이 다릅니다만, 사용 방법은 모두 동일합니다.
- IntSummaryStatistics
- LongSummaryStatistics
- DoubleSummaryStatistics
이 글에서는 SummaryStatistics의 기본적인 사용 방법 및 예제를 알아보겠습니다.
1. IntSummaryStatistics
아래 예제는 Stream에서 IntSummaryStatistics를 사용하는 예제입니다.
아래 예제를 보시면, Stream은 문자열을 요소로 전달하는데 mapToInt()
로 String을 Int로 변환했습니다.
그리고 이 스트림에 대해서 summaryStatistics()로 statistics 객체를 생성했습니다.
SummaryStatistics는 아래와 같이 getMax()
, getMin()
, getAverage()
, getCount()
등의 함수를 제공하여 쉽게 최대 값, 최소 값, 평균 등을 계산할 수 있습니다.
List<String> langs =
Arrays.asList("java", "kotlin", "haskell", "ruby", "javascript");
IntSummaryStatistics stats = langs.stream()
.mapToInt((lang) -> (lang.length()))
.summaryStatistics();
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Average: " + stats.getAverage());
System.out.println("Count: " + stats.getCount());
Output:
Max: 10
Min: 4
Average: 6.2
Count: 5
SummaryStatistics의 함수 이름에서 알 수 있듯이 다음과 같은 값들을 리턴해줍니다.
- IntSummaryStatistics.getMax() : 최대값 리턴
- IntSummaryStatistics.getMin() : 최소값 리턴
- IntSummaryStatistics.getAverage() : 평균값 리턴
- IntSummaryStatistics.getCount() : 요소들의 전체 개수 리턴
2. IntSummaryStatistics.accept()
accept()
는 IntSummaryStatistics 객체에 새로운 아이템을 추가하는 메소드입니다. 아래 코드에서 accept 메소드로 20을 추가했고, 결과를 보면 기존 값들에 20까지 포함하여 계산된 결과가 출력되었습니다.
List<String> langs =
Arrays.asList("java", "kotlin", "haskell", "ruby", "javascript");
IntSummaryStatistics stats = langs.stream()
.mapToInt((lang) -> (lang.length()))
.summaryStatistics();
stats.accept(20);
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Average: " + stats.getAverage());
System.out.println("Count: " + stats.getCount());
Output:
Max: 20
Min: 4
Average: 8.5
Count: 6
3. IntSummaryStatistics.combine()
combine()
은 두개의 statistics 객체를 합치는 함수입니다.
아래 코드를 보시면 stats, stats2 객체를 생성하였고 combine()으로 두개의 객체를 합쳤습니다. 결과를 보면 두 객체의 결과들로 다시 계산된 결과들이 출력되었습니다.
List<String> langs =
Arrays.asList("java", "kotlin", "haskell", "ruby", "javascript");
IntSummaryStatistics stats = langs.stream()
.mapToInt((lang) -> (lang.length()))
.summaryStatistics();
List<String> companies =
Arrays.asList("google", "apple", "google", "apple", "samsung");
IntSummaryStatistics stats2 = companies.stream()
.mapToInt((lang) -> (lang.length()))
.summaryStatistics();
stats.combine(stats2);
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Average: " + stats.getAverage());
System.out.println("Count: " + stats.getCount());
Output:
Max: 10
Min: 4
Average: 6.0
Count: 10
4. Collectors.summarizingInt()로 SummaryStatistics 생성
collect() 함수와 Collectors.summarizingInt()
를 이용하여 SummaryStatistics 객체를 만들 수도 있습니다.
List<String> langs =
Arrays.asList("java", "kotlin", "haskell", "ruby", "javascript");
IntSummaryStatistics stats = langs.stream()
.collect(Collectors.summarizingInt(String::length));
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Average: " + stats.getAverage());
System.out.println("Count: " + stats.getCount());
Output:
Max: 10
Min: 4
Average: 6.2
Count: 5
5. LongSummaryStatistics, DoubleSummaryStatistics 의 사용 방법
위의 IntSummaryStatistics 예제와 클래스 이름만 다를 뿐 구현 방법은 동일합니다.
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기