https://school.programmers.co.kr/learn/courses/30/lessons/12944
class Solution {
public double solution(int[] arr) {
double answer = 0;
for(int i = 0; i<arr.length; i++){
answer += arr[i];
}
answer /= arr.length;
return answer;
}
}
import java.util.Arrays;
public class GetMean {
public int getMean(int[] array) {
return (int) Arrays.stream(array).average().orElse(0);
}
public static void main(String[] args) {
int x[] = {5, 4, 3};
GetMean getMean = new GetMean();
// 아래는 테스트로 출력해 보기 위한 코드입니다.
System.out.println("평균값 : " + getMean.getMean(x));
}
Array 클래스
배열을 다루기 위한 다양한 메소드가 포함되어 있다. Array 클래스의 모든 메소드는 클래스 메소드(static method) 이므로, 객체를 생성하지 않고 바로 사용기 가능하다.
이 클래스는java.util패키지에 포함되므로, 반드시import문으로 패키지를 불러온 뒤에 사용해야한다.
스트림 (streams)
Arrays.stream();자바 8 이전에는
for또는foreach문을 돌며 요소 하나씩 꺼내는 방법이 있었다.
스트림은 '데이터의 흐름'이다. 배열 또는 컬렉션 인스턴스에서 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다.
또한 간단하게 병렬처리가 가능하다. 즉스레드를 이용해 많은 요소들을 빠르게 처리할 수 있다.
📌 스레드란?프로세스는 실행중인 프로그램을 의미한다면, 스레드는 실행 제어만 분리한 것을 의미한다. 스레드는 운영체제로부터 자원을 할당받는 프로세스로부터 자원을 할당받고, 프로세스의 코드/데이터/힙영역을 공유하기 때문에 좀 더 효율적으로 통신할 수 있습니다. 또한 컨텍스트 스위칭도 캐시 메모리를 비우지 않아도 되는 스레드쪽이 빠르다. 그리고, 스레드는 자원 공유로 인해 문제가 발생할 수 있다.
orElse
.average().orElse(0);
average()로도 계산이 가능하나OptionalDouble형으로 출력되기 때문에orElse문을 붙여야 한다.orElse(0): 해당 객체 안에 값이null이면 0을 반환한다.