Company Roster
Здравейте,
Един от тестовете ми се чупи за време - чудя се какво да оптимизирам още
Здравейте,
Един от тестовете ми се чупи за време - чудя се какво да оптимизирам още
Не си дал кода на Employee и Department класовете, но и без тях прави впечатление, че използваш твърде много колекции и преобразувания в main метода. Може да ползваш Map<String, List<Employee>> за съхраняване на служителите по отдели още докато ги четеш от конзолата. После пускаш един стрийм върху този мап, сортираш по средно заплащане и принтираш отдела (след още един сорт на служителите му по заплата).
Нещо такова :
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Map<String, List<Employee>> departments = new HashMap<>();
int n = Integer.parseInt(sc.nextLine());
for (int i = 0; i < n; i++) {
String[] token = sc.nextLine().split(" ");
Employee personToAdd = new Employee(token[0], Double.parseDouble(token[1]), token[2], token[3]);
if (token.length == 5) {
if (token[4].contains("@")) {
personToAdd.setEmail(token[4]);
} else {
personToAdd.setAge(Integer.parseInt(token[4]));
}
} else if (token.length == 6) { //length == 6
personToAdd.setEmail(token[4]);
personToAdd.setAge(Integer.parseInt(token[5]));
}
departments.putIfAbsent(personToAdd.getDepartment(), new ArrayList<>());
departments.get(personToAdd.getDepartment()).add(personToAdd);
}
String departmentInfo = departments.entrySet().stream()
.sorted(department -> Comparator.comparingDouble(department.getValue().stream().mapToDouble(Employee::getSalary).average().orElse(0.0)).reversed())
.map(department -> "Highest Average Salary: " + department.getKey() + System.lineSeparator() +
department.getValue().stream()
.sorted(Comparator.comparingDouble(Employee::getSalary).reversed())
.map(Object::toString)
.collect(Collectors.joining(System.lineSeparator())));
System.out.println(departmentInfo);
}
Ето едно решение от мен, с уговорката, че е по-сложно като структура от необходимото за решаването на задачата, но пък следва добри практики, които може да са ти интересни.
Мерси Мартин.
Изкарах 100 точки от тази задача - като махнах едно от полетата в класа.
Но има още една задача, която уж я реших, а ми дава че не влизам във времето за повечето отговори.
Проблемът при мен е, че все още не знам Maps и останалите функционалности на Java. Остава ми да гледам лекции за maps(associative arrays), lamdba, expressions.
А една от целите да пиша във форума бе, за да тествам как се пише във форума:)
Дано да напредна с останалата част от Fundamentals курса.