Advertisement
dzocesrce

[NP] Log Processor

Apr 16th, 2025 (edited)
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.59 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3. import java.util.stream.Collectors;
  4. import java.util.stream.IntStream;
  5. import java.time.LocalDateTime;
  6. import java.time.ZoneId;
  7. import java.time.format.DateTimeFormatter;
  8. import java.util.Arrays;
  9. import java.util.Random;
  10. import java.util.Comparator;
  11. import java.util.stream.Collectors;
  12.  
  13. interface ILog{
  14.     String getType();
  15.  
  16.     String getMessage();
  17.  
  18.     void setMessage(String newMessage);
  19.  
  20.     long getTimestamp();
  21.     //TODO write methods definitions here;
  22. }
  23.  
  24. interface LogProcessor<T> {
  25. ArrayList<T> processLogs(ArrayList<T> logs);
  26. }
  27.  
  28. class LogSystem<T extends ILog> {
  29.     ArrayList<T> logsList;
  30.  
  31.     public LogSystem(ArrayList<T> logs) {
  32.         this.logsList = logs;
  33.     }
  34.     //TODO add instance variable(s)
  35.  
  36. //TODO constructor
  37.  
  38. void printResults() {
  39.  
  40.     //TODO define concrete log processors with lambda expressions
  41.        LogProcessor<T> firstLogProcessor = processor->(ArrayList<T>) logsList.stream().filter(i->i.getType().equals("INFO")).collect(Collectors.toList());
  42.     //Processor that returns only the logs that have type INFO
  43.     LogProcessor<T> secondLogProcessor = processor->(ArrayList<T>) logsList.stream().filter(i->i.getMessage().length()<100).collect(Collectors.toList());
  44.  
  45.     LogProcessor<T> thirdLogProcessor = processor->(ArrayList<T>) logsList.stream().sorted(Comparator.comparing(ILog::getTimestamp)).collect(Collectors.toList());
  46.    System.out.println("RESULTS FROM THE FIRST LOG PROCESSOR");
  47.     firstLogProcessor.processLogs(logsList).forEach(l -> System.out.println(l.toString()));
  48.  
  49.     System.out.println("RESULTS FROM THE SECOND LOG PROCESSOR");
  50.     secondLogProcessor.processLogs(logsList).forEach(l -> System.out.println(l.toString()));
  51.  
  52.     System.out.println("RESULTS FROM THE THIRD LOG PROCESSOR");
  53.     thirdLogProcessor.processLogs(logsList).forEach(l -> System.out.println(l.toString()));
  54. }
  55. }
  56.  
  57. class RealLog implements ILog, Comparable<RealLog> {
  58.     String type;
  59.     String message;
  60.     long timestamp;
  61.     static Random rdm = new Random();
  62.     static int index = 100;
  63.  
  64.     public RealLog(String type, String message, long timestamp) {
  65.         this.type = type;
  66.         this.message = message;
  67.         this.timestamp = timestamp;
  68.     }
  69.  
  70.     @Override
  71.     public int compareTo(RealLog o) {
  72.         return Long.compare(this.timestamp, o.timestamp);
  73.     }
  74.  
  75.     @Override
  76.     public String getType() {
  77.         return type;
  78.     }
  79.  
  80.     @Override
  81.     public String getMessage() {
  82.         return message;
  83.     }
  84.  
  85.     @Override
  86.     public void setMessage(String newMessage) {
  87.         this.message = newMessage;
  88.     }
  89.  
  90.  
  91.     @Override
  92.     public long getTimestamp() {
  93.         return timestamp;
  94.     }
  95.  
  96.     public static RealLog createLog(String line) {
  97.         String[] parts = line.split("\\s+");
  98.         String date = parts[0] + "T" + parts[1];
  99.         LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
  100.         ZoneId zoneId = ZoneId.systemDefault();
  101.         long timestamp = ldt.atZone(zoneId).toEpochSecond() * 1000 + index;
  102.         ++index;
  103.         String type = parts[3];
  104.         String message = Arrays.stream(parts).skip(4).collect(Collectors.joining(" "));
  105.         return new RealLog(type, message, timestamp);
  106.     }
  107.  
  108.     @Override
  109.     public String toString() {
  110.         return String.format("%d [%s] %s", timestamp, type, message);
  111.     }
  112. }
  113.  
  114. class DummyLog implements ILog, Comparable<DummyLog> {
  115.     String type;
  116.     String message;
  117.     long timestamp;
  118.  
  119.     public DummyLog(String type, String message, long timestamp) {
  120.         this.type = type;
  121.         this.message = message;
  122.         this.timestamp = timestamp;
  123.     }
  124.  
  125.     @Override
  126.     public int compareTo(DummyLog o) {
  127.         return Long.compare(this.getTimestamp(), o.getTimestamp());
  128.     }
  129.  
  130.     @Override
  131.     public String getType() {
  132.         return type;
  133.     }
  134.  
  135.     @Override
  136.     public String getMessage() {
  137.         return message;
  138.     }
  139.  
  140.     @Override
  141.     public void setMessage(String newMessage) {
  142.         this.message = message;
  143.     }
  144.  
  145.     @Override
  146.     public long getTimestamp() {
  147.         return timestamp;
  148.     }
  149.  
  150.     public static DummyLog createLog(String line) {
  151.         String[] parts = line.split("\\s+");
  152.         return new DummyLog(parts[0], parts[1], Long.parseLong(parts[2]));
  153.     }
  154.  
  155.     @Override
  156.     public String toString() {
  157.         return "DummyLog{" +
  158.                 "type='" + type + '\'' +
  159.                 ", message='" + message + '\'' +
  160.                 ", timestamp=" + timestamp +
  161.                 '}';
  162.     }
  163. }
  164.  
  165. public class LoggerTest {
  166.     public static void main(String[] args) {
  167.  
  168.         Scanner sc = new Scanner(System.in);
  169.  
  170.         int firstCount = Integer.parseInt(sc.nextLine());
  171.  
  172.         ArrayList<RealLog> realLogs = IntStream.range(0, firstCount)
  173.                 .mapToObj(i -> RealLog.createLog(sc.nextLine()))
  174.                 .collect(Collectors.toCollection(ArrayList::new));
  175.  
  176.         int secondCount = Integer.parseInt(sc.nextLine());
  177.  
  178.         ArrayList<DummyLog> dummyLogs = IntStream.range(0, secondCount)
  179.                 .mapToObj(i -> DummyLog.createLog(sc.nextLine()))
  180.                 .collect(Collectors.toCollection(ArrayList::new));
  181.  
  182.         LogSystem<RealLog> realLogSystem = new LogSystem<>(realLogs);
  183.         LogSystem<DummyLog> dummyLogSystem = new LogSystem<>(dummyLogs);
  184.  
  185.         System.out.println("===REAL LOGS SYSTEM RESULTS===");
  186.         realLogSystem.printResults();
  187.         System.out.println("===DUMMY LOGS SYSTEM RESULTS===");
  188.         dummyLogSystem.printResults();
  189.  
  190.     }
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement