Самый богатый

  • 12
  • Недоступна
В метод main первым параметром приходит имя файла. В этом файле каждая строка имеет следующий вид: имя значение где [имя] — String, [значение] — double. [имя] и [значение] разделены пробелом. Для каждого имени посчитать сумму всех его значений. Вывести в консоль имена в алфавитном порядке, у которых максимальная сумма.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (203)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Buenos
Уровень 34, Минск, Беларусь
7 июня, 14:26
как вариант можно через мап и ТриСет:
for (Map.Entry<String, Double> entry : map.entrySet()) {
                if(entry.getValue()>max) {
                    max = entry.getValue();
                    forbes.clear();
                    forbes.add(entry.getKey());
                } else if (entry.getValue()==max) forbes.add(entry.getKey());
            }
comrade_b
Уровень 27, Амстердам, Нидерланды
6 июня, 09:49
Кто-нибудь смог решить через стрим, чтобы выводились все наибольшие значения по value из TreeMap или HashMap? Если делать
map.entrySet()
                .stream()
                .max(Comparator.comparing(Map.Entry::getValue))
                .map(Map.Entry::getKey)
                .get();
то выводится лишь одно максимальное значение. Я не нашел в сети решения, чтобы выдавались все максимальные значения. Выдается лишь первое попавшееся. В цикле я понимаю, как это найти. А в стриме?
milyasow
Уровень 30, Москва, Russian Federation
19 июня, 18:47
Например, так:
double finalMaxWealth = maxWealth;  // максимальное состояние из коллекции
            map.entrySet()
                    .stream()
                    .filter(a -> a.getValue() == finalMaxWealth)
                    .map(Map.Entry::getKey)
                    .sorted()
                    .forEach(System.out::println);
Сергей Смарт
Уровень 33, Одесса, Украина
1 июня, 09:25
Очень странная задачка, вроде все условия выполныл, несколько подходов делал через стримы и через циклы, но валидатор не в какую. Самое удивительное что скопировал верное решение в другой файл, и в результете вывелось только первое имя с самым высоким индексом, ни о каком алфавитном порядке и речи не идет.
MapXyZ
Уровень 33, Минск, Belarus
29 мая, 10:15
Долго думал зачем в правильном решении используют еще один TreeSet ради сортировки, если можно вместо добавления вывести сразу в консоль, ведь в первой же куче уже всё отсортировано по алфавиту... Может кто подскажет... Ведь можно проще...
if (salary.get(name).equals(maxSalary)) {
                System.out.println(name);
            }
и всё...
Шиша на ели Бардиллер в Ящик Пива
22 мая, 15:53
treeMap.merge(string[0],Double.parseDouble(string[1]), (oldVal, newVal) -> oldVal + newVal );
Igor Petrashevsky
Уровень 34
18 мая, 02:25
Валидатор мой колхоз на рассыпухе зарубил, хотя условия все точно соблюдены и на тестовых файлах мой колхоз и эталон с сайта - идентичны.
Ян
Уровень 22, Москва
29 апреля, 06:30
Решил задачу, в отличие от двух предыдущих (грррррр, жесть там для меня была). Но проблема возникла довольно любопытная. Вот так работает:
try(Scanner sc = new Scanner(new FileReader(path))){
String[] line;
while(sc.hasNext()){
line = sc.nextLine().split(" ");
try(BufferedReader bufferedReader = new BufferedReader(new FileReader(path))){
String[] line;
while((line = bufferedReader.readLine().split(" ")) != null){
А вот bufferReader то работал аналогично хорошо и результаты выводились как надо, то иногда NullPointer исключение возникало (в зависимости от экспериментов с файлом, хотя корректность файла я соблюдал). Я так и не понял в чём загвоздка.
milyasow
Уровень 30, Москва, Russian Federation
19 июня, 18:52
Скорей всего, из-за split() здесь:
while((line = bufferedReader.readLine().split(" ")) != null){
вам нужно строку проверять на null, и только потом пытаться делать ей split().
Grigory Filiptsov
Уровень 26, Воронеж, Россия
22 января, 08:28
за основу взял решение прошлой задачи. Добавил все значения мапы в treeset и поскольку там все хранится в порядке возрастания, получил максимум взяв последний элемент treeSet.last() И далее с помощью for each прошелся по той же маме на сравнение значений. И по значению вывел на экран соответственный ключ
Сергей Коваленко
Уровень 37, Краснодар
17 января, 19:10
как вариант, может приодится
Double maxValue = Collections.max(treeMap.values());
Иван Новиков
Уровень 23, Russian Federation
8 марта, 14:18
Или так: Double maxValue = hashMap.values().stream().max(Double::compare).get();
Сергей Коваленко
Уровень 37, Краснодар
8 марта, 17:03
да, но зачем усложнять.
Денис
Уровень 23, Владимир, Россия
17 апреля, 19:48
Согласен. Зачем усложнять еще одним пробегом по значениям мапы , если max можно получить уже при формировании самой мапы при чтении 🙂
Nik
Уровень 38, Калининград, Россия
17 января, 18:37
Через TreeMap. Максимум находим при добавлении. Потом перебираем TreeMap и выводим только те ключи, значения которых равны максимальному.