задачу решил, но кажется что можно упростить
public class Solution {
    public static void main(String[] args) throws IOException {
        HashMap<String, Double> map = new HashMap<>();
        FileReader fr = new FileReader(args[0]);
        BufferedReader reader = new BufferedReader(fr);
        double bill;
        String name;
        while(reader.ready()) {
            String[] a = reader.readLine().split(" ");
            name = a[0];
            bill = Double.parseDouble(a[1]);
            if(map.containsKey(name)) {
                map.put(name, map.get(name) + bill);
            } else map.put(name, bill);
        }
        fr.close();
        double maxAmount = 0;
        for(double d : map.values()) {
            if (maxAmount < d) maxAmount = d;
        }
        ArrayList<String> list = new ArrayList<>();
        for(String s : map.keySet()) {
            if(map.get(s) == maxAmount) list.add(s);
        }
        Collections.sort(list);
        for(String s : list) {
            System.out.println(s);
        }
    }
}
1. В 17 строчке нужно определить значение переменной, т.к. она далее может быть не проинициальзированна. Но присваивать "0" не совсем правильно ведь может быть счет отрицателен, т.е. долг. Какое значение лучшее присвоить этой переменной откуда его взять. Понимаю можно взять случайное подходящее значение из map.values. 2. Можно как то получить ключ зная его value другим способом? Про итератор знаю. 3. Почему этот код прочтет всего одну строку? Остальные просто проигнорирует. Не дали четкого ответа
FileReader fr = new FileReader(file);
while(fr.ready()) {
            String[] a = new BufferedReader(fr).readLine();
           //Код внутри не имеет значения
}