Как изменить порядок карты на основе ее значений? - PullRequest
0 голосов
/ 14 октября 2019

Моя программа рассчитывает суммы цифр всех значений, введенных в текстовый файл. Введенные значения и соответствующие им суммы цифр хранятся в LinkedHashMap и располагаются в порядке убывания (по сумме цифр). Пока работает, как и ожидалось.

Если вы вводите несколько значений с одинаковой суммой цифр, предполагается, что они (и только те) упорядочены по убыванию по их первоначальному значению, а не по сумме цифр на этот раз (отдых остается таким же, как и раньше). Есть ли способ сделать это?

Я все еще довольно плохо знаком с Java и программированием в целом.

Мой основной метод без лишних вещей:

String filePath = args[0];

LineNumberReader br = new LineNumberReader(new FileReader(filePath));
LinkedHashMap<BigInteger, BigInteger> unsortedMap = new LinkedHashMap<BigInteger, BigInteger>();

if(br.ready()){
       while (true) {
            String line = br.readLine();
            if (line == null) {
                break;
            }

      BigInteger input = new BigInteger(line);
      unsortedMap.put(input, methods.digitSum(input));
}

LinkedHashMap<BigInteger, BigInteger> reverseSortedMap = new LinkedHashMap<BigInteger, BigInteger>();

unsortedMap.entrySet()
            .stream()
            .limit(20)
            .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
            .forEachOrdered(x -> reverseSortedMap.put(x.getKey(), x.getValue()));

for (BigInteger key : reverseSortedMap.keySet()){
                System.out.println(new BigDecimal(key).toPlainString() +  " (Digit Sum: " + reverseSortedMap.get(key) + (")"));
}

br.close();
...