Java/연습문제

자바 연습문제 - List에서 객체 필드값 평균 구하기

코딩하는냥이 2025. 5. 26. 15:53
반응형

📖 문제

List에 저장되어 있는 Member 객체들 중에서,
모든 멤버의 평균 나이를 구해 출력해보세요.
※ Stream API의 적절한 메서드를 활용해야 합니다.


📦 예제 클래스

Member.java

public class Member {
	private String name;
	private int age;

	public Member(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}
}

Example.java

public class Example {
	public static void main(String[] args) {
		List<Member> list = Arrays.asList(
			new Member("홍길동", 30),
			new Member("파이썬", 40),
			new Member("감자바", 26)
		);

		double avg = list.stream()
			// 빈 공간
		System.out.println("평균 나이: " + avg);
	}
}

📌 예제 정답

double avg = list.stream()
	.mapToInt(Member::getAge)
	.average()
	.getAsDouble();

💻 실행 결과

평균 나이: 32.0

💬 코드 설명

  • .stream() : List를 스트림으로 변환합니다.
  • .mapToInt(Member::getAge) : 각 멤버 객체에서 나이(int)를 추출합니다.
  • .average() : 평균을 계산하는 OptionalDouble을 반환합니다.
  • .getAsDouble() : 평균값을 double로 반환합니다.

💡 학습 포인트

  1. mapToInt()로 정수 스트림 변환
    객체에서 숫자 데이터를 추출하려면 mapToInt()를 사용합니다.
  2. OptionalDouble 처리 이해
    .average()는 빈 스트림일 경우를 고려해 OptionalDouble을 반환하므로, .getAsDouble()을 사용하여 실제 값을 얻습니다.
  3. Stream으로 평균 계산하는 패턴 익히기
    컬렉션에서 특정 필드의 평균을 구할 때 자주 사용하는 패턴입니다.

📌 마무리 정리

  • 사용자님의 답안은 문제의 요구를 완벽히 반영한 정확하고 효율적인 구현입니다.
  • 이 문제는 객체 필드 추출 + 평균 연산 + Optional 처리라는 Stream API의 핵심 조합을 실습하기 위한 좋은 예제입니다.
  • 실무에서도 나이, 점수, 가격 등의 평균값을 구하는 상황에서 가장 자주 사용되는 패턴 중 하나입니다.