Все условия, как мне кажется, выполнены, но почему то валидатор так не считает. Причем, 3ье условие отмечено как выполненное, а 2е нет. Разве здесь нет противоречия?
package com.javarush.task.task19.task1919;
/*
Считаем зарплаты
В метод main первым параметром приходит имя файла.
В этом файле каждая строка имеет следующий вид:
имя значение
где [имя] - String, [значение] - double. [имя] и [значение] разделены пробелом.
Для каждого имени посчитать сумму всех его значений.
Все данные вывести в консоль, предварительно отсортировав в возрастающем порядке по имени.
Закрыть потоки.
Пример входного файла:
Петров 2
Сидоров 6
Иванов 1.35
Петров 3.1
Пример вывода:
Иванов 1.35
Петров 5.1
Сидоров 6.0
Требования:
•
Программа НЕ должна считывать данные с консоли.
•
Программа должна считывать содержимое файла (используй FileReader).
•
Поток чтения из файла (FileReader) должен быть закрыт.
•
Программа должна выводить в консоль каждое имя и сумму всех его значений, все данные должны быть отсортированы в возрастающем порядке по имени.
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(args[0]));
HashMap<String, Double> map = new HashMap<>();
while (br.ready()){
String name = br.readLine().split(" ")[0];
if (!map.containsKey(name)){
map.put(name, 0.0);
}
}
for(Map.Entry pair : map.entrySet()){
String name = (String) pair.getKey();
BufferedReader br1 = new BufferedReader(new FileReader(args[0]));
while (br1.ready()){
String str = br1.readLine();
String name1 = str.split(" ")[0];
double n = Double.parseDouble(str.split(" ")[1]);
if(name.equals(name1)){
map.put(name, map.get(name)+n);
}
}
br1.close();
}
br.close();
ArrayList list = new ArrayList();
map.entrySet().stream().sorted(Map.Entry.<String, Double>comparingByValue()).forEach(e ->list.add(e.getKey() + " " + e.getValue()));
for(Object el : list){
System.out.println(el);
}
}
}