Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.scalefocus;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.List;
- import java.util.Scanner;
- import java.util.stream.Collectors;
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int lines = Integer.parseInt(sc.nextLine());
- ArrayList<Employee> employees = new ArrayList<>();
- while (lines > 0) {
- String[] commands = sc.nextLine().split(" +");
- Employee employee = new Employee();
- employee.setName(commands[0]);
- employee.setSalary(Double.parseDouble(commands[1]));
- employee.setPosition(commands[2]);
- employee.setDepartment(commands[3]);
- switch (commands.length) {
- case 5:
- String ageOrEmail = commands[4];
- if (isNumeric(ageOrEmail)) {
- employee.setAge(Integer.parseInt(ageOrEmail));
- } else {
- employee.setEmail(ageOrEmail);
- }
- break;
- case 6:
- String email = commands[4];
- int age = Integer.parseInt(commands[5]);
- employee.setEmail(email);
- employee.setAge(age);
- break;
- }
- employees.add(employee);
- lines--;
- }
- List<String> departmentsList = employees.stream()
- .map(Employee::getDepartment)
- .distinct()
- .collect(Collectors.toList());
- List<Department> departments = new ArrayList<>();
- for (String department : departmentsList) {
- departments.add(new Department(department,
- employees.stream().filter(employee -> employee.getDepartment()
- .equals(department)).collect(Collectors.toList())));
- }
- departments.sort(Comparator.comparingDouble(Department::getAverageSalary).reversed());
- Department department = departments.get(0);
- department.getEmployees().sort(Comparator.comparingDouble(Employee::getSalary).reversed());
- System.out.printf("Highest Average Salary: %s%n", department.getName());
- for (Employee employee : department.getEmployees()) {
- System.out.printf("%s %.2f %s %d%n", employee.getName(), employee.getSalary(), employee.getEmail(), employee.getAge());
- }
- }
- private static boolean isNumeric(String emailOrAge) {
- if (emailOrAge == null) {
- return false;
- }
- try {
- int age = Integer.parseInt(emailOrAge);
- } catch (NumberFormatException nfe) {
- return false;
- }
- return true;
- }
- }
- class Employee {
- private String name;
- private double salary;
- private String position;
- private String department;
- private String email;
- private int age;
- public void setName(String name) {
- this.name = name;
- }
- public void setSalary(double salary) {
- this.salary = salary;
- }
- public void setPosition(String position) {
- this.position = position;
- }
- public void setDepartment(String department) {
- this.department = department;
- }
- public Employee() {
- this.email = "n/a";
- this.age = -1;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public double getSalary() {
- return salary;
- }
- public String getDepartment() {
- return department;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- }
- class Department {
- private List<Employee> employees;
- private String name;
- private double averageSalary;
- public Department(String name, List<Employee> employees) {
- this.name = name;
- this.employees = employees;
- this.averageSalary = employees.stream()
- .mapToDouble(Employee::getSalary)
- .average().getAsDouble();
- }
- public List<Employee> getEmployees() {
- return employees;
- }
- public String getName() {
- return name;
- }
- public double getAverageSalary() {
- return averageSalary;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement