Advertisement
mamant38

TreeMap + сортировка по значению и вывод большего

May 24th, 2018
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.67 KB | None | 0 0
  1. package com.javarush.task.task19.task1920;
  2.  
  3. /*
  4. Самый богатый
  5. В метод main первым параметром приходит имя файла.
  6. В этом файле каждая строка имеет следующий вид:
  7. имя значение
  8. где [имя] - String, [значение] - double. [имя] и [значение] разделены пробелом.
  9.  
  10. Для каждого имени посчитать сумму всех его значений.
  11. Вывести в консоль имена в алфавитном порядке, у которых максимальная сумма.
  12. Имена разделять пробелом либо выводить с новой строки.
  13. Закрыть потоки.
  14.  
  15. Пример входного файла:
  16. Петров 0.501
  17. Иванов 1.35
  18. Петров 0.85
  19.  
  20. Пример вывода:
  21. Петров
  22.  
  23.  
  24. Требования:
  25. 1. Программа НЕ должна считывать данные с консоли.
  26. 2. Программа должна считывать содержимое файла (используй FileReader).
  27. 3. Поток чтения из файла (FileReader) должен быть закрыт.
  28. 4. Программа должна выводить в консоль имена, у которых максимальная сумма.
  29. */
  30.  
  31. import sun.applet.resources.MsgAppletViewer;
  32.  
  33. import java.io.BufferedReader;
  34. import java.io.FileReader;
  35. import java.util.*;
  36. import java.util.function.Consumer;
  37. import java.util.stream.Collectors;
  38.  
  39. public class Solution {
  40.     public static void main(String[] args) throws Exception {
  41.  
  42.         FileReader fileReader = new FileReader(args[0]);
  43.         BufferedReader bufferedReader = new BufferedReader(fileReader);
  44.  
  45.         double sum = 0;
  46.         String str;
  47.         Map<String,Double> map = new TreeMap<>();
  48.  
  49.         while ((str=bufferedReader.readLine())!=null){
  50.             String [] stroka = new String[1];
  51.             stroka = str.split(" ",2);
  52.             String key = stroka[0];
  53.             double vaule = Double.parseDouble(stroka[1]);
  54.             if (map.containsKey(key)){
  55.                 sum = map.get(key)+vaule;
  56.             }else {
  57.                 sum = vaule;
  58.             }
  59.             map.put(key,sum);
  60.         }
  61.         bufferedReader.close();
  62.         fileReader.close();
  63.  
  64.  
  65.         Set<String> set = new TreeSet<>();
  66.  
  67.         double amount = Collections.max(map.values());
  68.         for (Map.Entry<String, Double> pair : map.entrySet())
  69.             if (pair.getValue() >= amount) set.add(pair.getKey());
  70.         for (String x : set) System.out.println(x);
  71.  
  72.         }
  73.  
  74.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement