Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.50 KB | None | 0 0
  1. package com.scalefocus;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Comparator;
  5. import java.util.List;
  6. import java.util.Scanner;
  7. import java.util.stream.Collectors;
  8.  
  9. public class Main {
  10.  
  11. public static void main(String[] args) {
  12. Scanner sc = new Scanner(System.in);
  13.  
  14. int lines = Integer.parseInt(sc.nextLine());
  15.  
  16. ArrayList<Employee> employees = new ArrayList<>();
  17.  
  18. while (lines > 0) {
  19. String[] commands = sc.nextLine().split(" +");
  20.  
  21. Employee employee = new Employee();
  22. employee.setName(commands[0]);
  23. employee.setSalary(Double.parseDouble(commands[1]));
  24. employee.setPosition(commands[2]);
  25. employee.setDepartment(commands[3]);
  26.  
  27. switch (commands.length) {
  28. case 5:
  29. String ageOrEmail = commands[4];
  30. if (isNumeric(ageOrEmail)) {
  31. employee.setAge(Integer.parseInt(ageOrEmail));
  32. } else {
  33. employee.setEmail(ageOrEmail);
  34. }
  35. break;
  36. case 6:
  37. String email = commands[4];
  38. int age = Integer.parseInt(commands[5]);
  39. employee.setEmail(email);
  40. employee.setAge(age);
  41. break;
  42. }
  43. employees.add(employee);
  44. lines--;
  45. }
  46.  
  47. List<String> departmentsList = employees.stream()
  48. .map(Employee::getDepartment)
  49. .distinct()
  50. .collect(Collectors.toList());
  51.  
  52. List<Department> departments = new ArrayList<>();
  53. for (String department : departmentsList) {
  54. departments.add(new Department(department,
  55. employees.stream().filter(employee -> employee.getDepartment()
  56. .equals(department)).collect(Collectors.toList())));
  57. }
  58.  
  59. departments.sort(Comparator.comparingDouble(Department::getAverageSalary).reversed());
  60. Department department = departments.get(0);
  61. department.getEmployees().sort(Comparator.comparingDouble(Employee::getSalary).reversed());
  62.  
  63. System.out.printf("Highest Average Salary: %s%n", department.getName());
  64.  
  65. for (Employee employee : department.getEmployees()) {
  66. System.out.printf("%s %.2f %s %d%n", employee.getName(), employee.getSalary(), employee.getEmail(), employee.getAge());
  67. }
  68. }
  69.  
  70. private static boolean isNumeric(String emailOrAge) {
  71. if (emailOrAge == null) {
  72. return false;
  73. }
  74. try {
  75. int age = Integer.parseInt(emailOrAge);
  76. } catch (NumberFormatException nfe) {
  77. return false;
  78. }
  79. return true;
  80. }
  81. }
  82.  
  83. class Employee {
  84. private String name;
  85. private double salary;
  86. private String position;
  87. private String department;
  88. private String email;
  89. private int age;
  90.  
  91.  
  92. public void setName(String name) {
  93. this.name = name;
  94. }
  95.  
  96. public void setSalary(double salary) {
  97. this.salary = salary;
  98. }
  99.  
  100. public void setPosition(String position) {
  101. this.position = position;
  102. }
  103.  
  104. public void setDepartment(String department) {
  105. this.department = department;
  106. }
  107.  
  108. public Employee() {
  109. this.email = "n/a";
  110. this.age = -1;
  111. }
  112.  
  113.  
  114. public int getAge() {
  115. return age;
  116. }
  117.  
  118. public void setAge(int age) {
  119. this.age = age;
  120. }
  121.  
  122. public String getName() {
  123. return name;
  124. }
  125.  
  126. public double getSalary() {
  127. return salary;
  128. }
  129.  
  130. public String getDepartment() {
  131. return department;
  132. }
  133.  
  134. public String getEmail() {
  135. return email;
  136. }
  137.  
  138. public void setEmail(String email) {
  139. this.email = email;
  140. }
  141. }
  142.  
  143. class Department {
  144. private List<Employee> employees;
  145. private String name;
  146. private double averageSalary;
  147.  
  148.  
  149. public Department(String name, List<Employee> employees) {
  150. this.name = name;
  151. this.employees = employees;
  152. this.averageSalary = employees.stream()
  153. .mapToDouble(Employee::getSalary)
  154. .average().getAsDouble();
  155. }
  156.  
  157. public List<Employee> getEmployees() {
  158. return employees;
  159. }
  160.  
  161. public String getName() {
  162. return name;
  163. }
  164.  
  165. public double getAverageSalary() {
  166. return averageSalary;
  167. }
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement