Здравствуйте!
Написал программу, мб не лучшим способом, зато столько велосипеда :D
Проблемы 2:
1. Не проходит валидацию по последнему пункту
2. Не особо понятно почему при выводе листа, который я считал из файла, обрезаются первые буквы, пример:
Petrov 0.501
Ivanov 1.35
Petrov 0.85
Qwerty 234.12
asd 10.9
zcz 234.12
На вывод в лист получаю
[cz=234.12, werty=234.12, sd=10.9, etrov=1.351, vanov=1.35]
package com.javarush.task.task19.task1920;
/*
Самый богатый
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader fileReader = new BufferedReader(new FileReader(args[0]));
TreeMap<String, Double> listPerson = new TreeMap <>();
List<String> allStrs = new ArrayList<>();
while((fileReader.read()) != -1){
allStrs.add(fileReader.readLine());
}
String string = new String();
for(int i = 0; i < allStrs.size(); i++){
string += allStrs.get(i) + " ";
}
allStrs.clear();
for(String ret : string.split(" ")){
allStrs.add(ret);
}
List<String> names = new ArrayList<>();
List<Double> prices = new ArrayList<>();
for(int i = 0; i <= allStrs.size() - 1; i++){
if(i % 2 != 0){
prices.add(Double.parseDouble(allStrs.get(i).trim()));
}else
names.add(allStrs.get(i));
}
for(int i = 0; i < allStrs.size() / 2; i++){
if(listPerson.containsKey(names.get(i))){
for(int j = 0; j < i; j++){
if(names.get(i).equals(names.get(j))){
listPerson.put(names.get(i), prices.get(j) + prices.get(i));
}
}
}else
listPerson.put(names.get(i), prices.get(i));
}
List<Map.Entry<String, Double>> list = listPerson.entrySet().stream()
.sorted((e1, e2) -> -e1.getValue().compareTo(e2.getValue()))
.collect(Collectors.toList());
System.out.println(list);
double maxPrice = list.get(0).getValue();
for(int i = 0; i < list.size(); i++){
if(maxPrice == list.get(i).getValue()){
System.out.println(list.get(i).getKey());
}
}
fileReader.close();
}
}