문제: https://school.programmers.co.kr/learn/courses/30/lessons/120817
✅ 내 풀이
class Solution {
public double solution(int[] numbers) {
double answer = 0;
int sum = 0;
for(int i: numbers){
sum+=i;
}
answer = sum/(double)numbers.length;
return answer;
}
}
// 다른풀이 stream()
import java.util.Arrays;
class Solution {
public double solution(int[] numbers) {
return Arrays.stream(numbers).average().orElse(0);
}
}
average()와 orElse(0)는 스트림을 활용하여 평균 값을 계산하고 반환할 때 유용한 명령어이다.
stream()은 데이터의 연속적인 흐름을 나타내는 기능이며 컬렉션(Collection)과 배열 등의 데이터 소스로부터 데이터를 받아들이고, 다양한 중간 연산과 최종 연산을 통해 데이터를 처리하는 기능을 제공한다.
🔻 특징
💬 스트림을 사용하기 위해 다음과 같은 일련의 단계를 따를 수 있다.
✅ 스트림(stream) 예시
import java.util.Arrays;
import java.util.List;
public class StreamExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("apple", "banana", "orange", "kiwi", "grape");
fruits.stream() // 스트림 생성
.filter(fruit -> fruit.length() > 5) // 중간 연산: 길이가 5보다 큰 과일만 필터링
.map(String::toUpperCase) // 중간 연산: 모든 과일을 대문자로 변환
.sorted() // 중간 연산: 과일을 알파벳순으로 정렬
.forEach(System.out::println); // 최종 연산: 결과 출력
}
}
예시에서는 fruits 리스트를 스트림으로 변환하고, 중간 연산과 최종 연산을 사용하여 데이터를 처리하고 결과를 출력하고 있다.
filter(), map(), sorted() 등의 중간 연산을 체인 형태로 연결하고, forEach()를 통해 최종 연산을 수행하여 각 과일을 대문자로 변환하고 알파벳순으로 정렬한 결과를 출력한다.
스트림은 데이터 처리 작업을 간결하고 효율적으로 수행할 수 있는 강력한 기능으로, 함수형 프로그래밍 스타일의 코드를 작성할 수 있으며, 스트림은 병렬 처리 등 다양한 기능을 지원하므로 대량의 데이터를 처리할 때 효과적으로 사용할 수 있다.
1. 중간 연산 (Intermediate Operations):
2. 최종 연산 (Terminal Operations):
✅ average() // orElse(0): 예제
import java.util.stream.IntStream;
public class StreamAverageExample {
public static void main(String[] args) {
IntStream numbers = IntStream.of(1, 2, 3, 4, 5);
double average = numbers.average().orElse(0);
System.out.println("Average: " + average);
}
}
🔹 orElse(0):