Решил подробней изучить Steam и лямды на практике.
Не получилось через max и maxBy получить все максимальные значения (возвращает только одно значение), можно это решить как то элегантней чем через второй Strem?
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.*;
public class Solution {
public static void main(String[] args) throws IOException {
Map<String, Double> payroll;
Stream<String> stream = new BufferedReader(new FileReader(args[0])).lines();
// п.1 Создаем Map из строк файл
payroll = stream
.filter(o -> o.length() > 0)
.map(o -> o.split(" "))
.collect(
Collectors.toMap(
a -> a[0], a -> Double.parseDouble(a[1]),
(a1, a2) -> a1 + a2,
LinkedHashMap::new)
);
//п.2 Находим максимальное значение, сортируем созданную (в п.1) карту и выводим все совпадения
payroll.entrySet().stream()
.max((o1, o2) -> Double.compare(o1.getValue(), o2.getValue()))
.map(o1 -> {
payroll.entrySet().stream()
.sorted((a, b) -> a.getKey().compareTo(b.getKey()))
.forEach(o2 -> {
if (o1.getValue().equals(o2.getValue()))
System.out.println(o2.getKey()); });
return null;
});
}
}