Вы можете сделать это так, используя Java8,
Path path = Paths.get("src/main/resources", "data.txt");
try (Stream<String> lines = Files.lines(path)) {
String[] winner = lines.map(l -> l.split(" "))
.reduce((a1, a2) -> Integer.valueOf(a1[2]) < Integer.valueOf(a2[2]) ? a1 : a2)
.orElseThrow(IllegalArgumentException::new);
System.out.println(Arrays.toString(winner));
}
Прочитайте каждую строку файла, разбейте ее на массив и затем сделайте сокращение на основе количества попыток, сохранив одну с минимальным числом попыток. Затем извлеките то, что вам нужно из результата.
Если у вас есть несколько победителей и вы хотите получить их всех, шаг сокращения не сработает. Возможно, вам придется собрать их в TreeMap
, где ключ - это счет, а значение - это имя игроков с таким счетом. Затем получите первую запись, так как это та, которая имеет самый низкий балл. Вот код.
TreeMap<Integer, List<String>> winners = lines.map(l -> l.split(" "))
.collect(Collectors.groupingBy(a -> Integer.valueOf(a[2]), TreeMap::new,
Collectors.mapping(a -> a[0], Collectors.toList())));
System.out.println(winners.firstEntry());