Найти несколько максимальных значений в Hashmap - PullRequest
0 голосов
/ 27 декабря 2018

, пожалуйста, помогите мне выяснить, почему этот код показывает только одну фамилию, мне нужно показать всем, у кого есть максимальные значения, которые я проверяю, и увидеть, что он находит максимум, он сравнивает, но показывает только одну фамилию

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 reader = new BufferedReader(new FileReader(args[0]));
        TreeMap<String, Double> map = new TreeMap<>();
        ArrayList<String> sArray = new ArrayList<>();

        while (reader.ready()) {
            String st = reader.readLine();
            sArray.add(st);
        }


        for (String s : sArray) {
            String[] array = s.split(" ");
            String name = array[0];
            double price = Double.parseDouble(array[1]);
            if (map.containsKey(name)) {
                price = price + map.get(name);
            }
            map.put(name, price);
        }

        Double maxValueInMap = (Collections.max(map.values()));  // This will return max value in the Hashmap
        System.out.println(maxValueInMap);
        for (Map.Entry<String, Double> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue() + " | " + (entry.getValue()==maxValueInMap));// Itrate through hashmap
            if (entry.getValue() == maxValueInMap) {
                System.out.println(entry.getKey());     // Print the key with max value
            }
        }

        reader.close();
    }

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Если вы только пытаетесь вернуть имена с наивысшей ценой, лучше сопоставить цену с именами (либо сопоставляя цену с набором имен, либо используя мультикарту guava).

Вы можетедаже лучше, сохраняя только набор имен и переменную для отслеживания самого дорогого имени.Когда вы столкнетесь с чем-то более дорогим, чем ваше самое дорогое имя, «сбросьте» набор, который вы вернете.

0 голосов
/ 27 декабря 2018

Вы должны сравнить числовые объекты с .equals() вместо ==:

for (Map.Entry<String, Double> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue() + " | " + (entry.getValue().equals(maxValueInMap)));// Itrate through hashmap
            if (entry.getValue().equals(maxValueInMap)) {
                System.out.println(entry.getKey());     // Print the key with max value
            }
        }
...