Загрузка данных


import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) throws Exception {

        // Читаем все строки из файла
        List<String> lines = Files.readAllLines(Path.of("server.log"));

        // Преобразуем правильные строки в LogEntry
        List<LogEntry> validLogs = lines.stream()
                .map(LogAnalyzer::parseLogLine)
                .flatMap(Optional::stream)
                .collect(Collectors.toList());

        // Считаем количество успешно распарсенных логов
        System.out.println("Успешно распарсено логов: " + validLogs.size());

        // Группируем логи по уровню и считаем их количество
        Map<String, Long> stats = validLogs.stream()
                .collect(Collectors.groupingBy(
                        LogEntry::level,
                        Collectors.counting()
                ));

        System.out.println("Статистика по уровням: " + stats);

        // Оставляем только ERROR и получаем их IP
        List<String> errorIps = validLogs.stream()
                .filter(log -> log.level().equals("ERROR"))
                .map(LogEntry::ip)
                .collect(Collectors.toList());

        System.out.println("IP с ошибками: " + errorIps);
    }
}