ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 학원 DAY24. 맵 활용하기
    기록 2022. 10. 8. 20:56

    package day24.map;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    public class MapApp7 {
    
    	public static void main(String[] args) {
    		List<Employee> employeeList = Arrays.asList(new Employee("홍보부", "유재석", 300),
    				new Employee("홍보부", "지석진", 400),
    				new Employee("인사부", "김종국", 500),
    				new Employee("인사부", "하하", 200),
    				new Employee("인사부", "송지효", 350),
    				new Employee("총무부", "양세찬", 550),
    				new Employee("총무부", "전소민", 200),
    				new Employee("총무부", "리지", 600),
    				new Employee("총무부", "송중기", 450),
    				new Employee("연구소", "개리", 700),
    				new Employee("연구소", "이광수", 800),
    				new Employee("연구소", "홍길동", 650));
    		
    		// 부서별로 사원정보 분류하기
    		Map<String, List<Employee>> map1 = new HashMap<>();
    		
    		for (Employee emp : employeeList) { 
    			// 사원의 소속부서를 조회한다.
    			String dept = emp.getDept();
    			// Map객체에 해당 소속부서로 저장된 key가 있는지 확인한다.
    			if (map1.containsKey(dept)) { 
    				List<Employee> list = map1.get(dept);
    				list.add(emp);
    			} else {
    				// Map객체에 해당 소속부서의 key가 존재하지 않으면
    				// 사원정보를 여러 개 저장할 수 있는 List객체를 생성한다.
    				// List객체에 지금 조회된 사원정보를 저장한다.
    				// Map객체에 해당 소속부서를 key로 List객체를 저장한다.
    				List<Employee> list = new ArrayList<>();
    				list.add(emp);
    				map1.put(dept, list);
    			}
    		}
    		
    		// Map<String, List<Employee>> 객체의 key를 전부 조회하기
    		Set<String> keys = map1.keySet();
    		
    		// 부서별 인원 수 출력하기
    		for (String key : keys) { 
    			List<Employee> employees = map1.get(key);
    			int count = employees.size();
    			System.out.println("["+key+"] " + count + "명");
    		}
    		System.out.println();
    		
    		System.out.println("### 부서별 총급여와 평균급여를 출력하기");
    		// 부서별 총급여와 평균급여를 출력하기
    		for (String key : keys) { 
    			List<Employee> employees = map1.get(key);
    			int totalSalary = 0;
    			int averageSalary = 0;
    			
    			for (Employee emp : employees) { 
    				totalSalary += emp.getSalary();
    			}
    			averageSalary = totalSalary/employees.size();
    			
    			System.out.println("부서명: " + key);
    			System.out.println("총급여: " + totalSalary);
    			System.out.println("평균급여: " + averageSalary);
    			System.out.println();
    		}
    		
    	}
    
    	// 정적 내부 클래스 (main메소드는 static이기 때문에 static에만 접근할 수 있다.) (파일이름에 $표시가 있는 실행파일이 하나 더 만들어진다.)
    	static class Employee { 
    		private String dept;
    		private String name;
    		private int salary;
    		
    		public Employee(String dept, String name, int salary) { 
    			this.dept = dept;
    			this.name = name;
    			this.salary = salary;
    		}
    		public String getDept() {
    			return dept;
    		}
    		public String getName() {
    			return name;
    		}
    		public int getSalary() {
    			return salary;
    		}
    		
    	}
    }

    실행결과 : 

    [총무부] 4명
    [홍보부] 2명
    [인사부] 3명
    [연구소] 3명

    ### 부서별 총급여와 평균급여를 출력하기
    부서명: 총무부
    총급여: 1800
    평균급여: 450

    부서명: 홍보부
    총급여: 700
    평균급여: 350

    부서명: 인사부
    총급여: 1050
    평균급여: 350

    부서명: 연구소
    총급여: 2150
    평균급여: 716

    '기록' 카테고리의 다른 글

    학원 DAY25~26. 예외 처리(2)  (0) 2022.10.12
    메소드 작성 관련  (0) 2022.10.08
    학원 DAY24. 예외 처리  (0) 2022.10.08
    학원 DAY23. 매개변수의 결정, 콜렉션과 맵  (0) 2022.10.06
    학원 DAY 22. Iterator<E> 인터페이스  (0) 2022.10.06

    댓글

Designed by Tistory.