kristina7

НП - Лаб 4-2 Генерички распоредувач

Jan 3rd, 2019
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.98 KB | None | 0 0
  1. /*
  2. Треба да се развие класа Timestamp која претставува пар на објекти од кои едниот е секогаш од тип LocalDateTime, а другиот објект е од генеричкиот тип T. Класата Timestamp ги нуди следниве функционалности:
  3.  
  4. Timestamp(LocalDateTime time, T element) - конструктор
  5. getTime():LocalDateTime
  6. getElement():T
  7. compareTo(Timestamp<?> t):int - споредувањето се прави само врз основа на времињата
  8. equals(Object o):boolean - враќа true ако се исти времињата
  9. toString() :String - враќа стринг репрезентација со времето (toString) и елементот во формат time element
  10. Забелешка: двете променливи time и element мора да бидат обележани како final.
  11.  
  12. Класата Timestamp сега треба да се искористи за да се развие класа Scheduler. Оваа класа чува повеќе објекти од класата Timestamp и исто така има еден генерички параметар T кој всушност се однесува на типот на објект кој се наоѓа во Timestamp. Класата Scheduler треба да ги имплементира следниве методи:
  13.  
  14. Scheduler() - креира нов празен распоредувач
  15. add(Timestamp<T> t) - додава нов објект во распоредувачот
  16. remove(Timestamp<T> t):boolean - го брише соодветниот елемент од распоредувачот доколку постои и враќа true, во спротивно враќа false
  17. next():Timestamp<T> - го враќа следниот Timestamp објект, односно тој објект чие што време е најблиску до тековното (сега) и сѐ уште НЕ е поминато
  18. last():Timestamp<T> - го враќа објектот кој има време најблиску до тековното (сега) и веќе E поминат
  19. getAll(LocalDateTime begin, LocalDateTime end):List<Timestamp<T>> - враќа листа на настани чии времиња се наоѓаат помеѓу begin и end (не вклучувајќи ги begin и end).
  20. */
  21.  
  22. import java.time.Instant;
  23. import java.time.LocalDateTime;
  24. import java.time.ZoneId;
  25. import java.util.ArrayList;
  26. import java.util.Collections;
  27. import java.util.List;
  28. import java.util.Scanner;
  29. import java.util.TreeSet;
  30. import java.util.function.Predicate;
  31. import java.util.stream.Collectors;
  32.  
  33. class Timestamp<T> implements Comparable<Timestamp<?>> {
  34.     final LocalDateTime time;
  35.     final T element;
  36.  
  37.     public Timestamp(LocalDateTime time, T element) {
  38.         super();
  39.         this.time = time;
  40.         this.element = element;
  41.     }
  42.  
  43.     public LocalDateTime getTime() {
  44.         return time;
  45.     }
  46.  
  47.     public T getElement() {
  48.         return element;
  49.     }
  50.  
  51.     @Override
  52.     public int compareTo(Timestamp<?> o) {
  53.         return time.compareTo(o.time);
  54.     }
  55.  
  56.     @Override
  57.     public boolean equals(Object obj) {
  58.         Timestamp other = (Timestamp) obj;
  59.         return time.equals(other.time);
  60.     }
  61.  
  62.     @Override
  63.     public String toString() {
  64.         return time + " " + element;
  65.     }
  66. }
  67.  
  68. class Scheduler<T> {
  69.     TreeSet<Timestamp<T>> timestamps;
  70.  
  71.     public Scheduler() {
  72.         timestamps = new TreeSet<>();
  73.     }
  74.     public void add(Timestamp<T> t) {
  75.         timestamps.add(t);
  76.     }
  77.     public boolean remove(Timestamp<T> t) {
  78.         return timestamps.remove(t);
  79.     }
  80.     public Timestamp<T> next() {
  81.         return timestamps.ceiling(new Timestamp(LocalDateTime.now(), ""));
  82.     }
  83.     public Timestamp<T> last() {
  84.         return timestamps.floor(new Timestamp(LocalDateTime.now(), ""));
  85.     }
  86.     public List<Timestamp<T>> getAll(LocalDateTime begin, LocalDateTime end) {
  87.         Predicate<Timestamp<T>> inRange = timestamp -> timestamp.time.isAfter(begin)&&timestamp.time.isBefore(end);
  88.         return timestamps.stream().filter(inRange).collect(Collectors.toList());
  89.     }
  90.  
  91. }
  92.  
  93. public class SchedulerTest {
  94.  
  95.     static final LocalDateTime TIME = LocalDateTime.of(2016, 10, 25, 10, 15);
  96.  
  97.     public static void main(String[] args) {
  98.         Scanner jin = new Scanner(System.in);
  99.         int k = jin.nextInt();
  100.         if (k == 0) { // test Timestamp with String
  101.             Timestamp<String> t = new Timestamp<>(TIME, jin.next());
  102.             System.out.println(t);
  103.             System.out.println(t.getTime());
  104.             System.out.println(t.getElement());
  105.         }
  106.         if (k == 1) { // test Timestamp with ints
  107.             Timestamp<Integer> t1 = new Timestamp<>(TIME, jin.nextInt());
  108.             System.out.println(t1);
  109.             System.out.println(t1.getTime());
  110.             System.out.println(t1.getElement());
  111.             Timestamp<Integer> t2 = new Timestamp<>(TIME.plusDays(10), jin.nextInt());
  112.             System.out.println(t2);
  113.             System.out.println(t2.getTime());
  114.             System.out.println(t2.getElement());
  115.             System.out.println(t1.compareTo(t2));
  116.             System.out.println(t2.compareTo(t1));
  117.             System.out.println(t1.equals(t2));
  118.             System.out.println(t2.equals(t1));
  119.         }
  120.         if (k == 2) {// test Timestamp with String, complex
  121.             Timestamp<String> t1 = new Timestamp<>(ofEpochMS(jin.nextLong()), jin.next());
  122.             System.out.println(t1);
  123.             System.out.println(t1.getTime());
  124.             System.out.println(t1.getElement());
  125.             Timestamp<String> t2 = new Timestamp<>(ofEpochMS(jin.nextLong()), jin.next());
  126.             System.out.println(t2);
  127.             System.out.println(t2.getTime());
  128.             System.out.println(t2.getElement());
  129.             System.out.println(t1.compareTo(t2));
  130.             System.out.println(t2.compareTo(t1));
  131.             System.out.println(t1.equals(t2));
  132.             System.out.println(t2.equals(t1));
  133.         }
  134.         if (k == 3) { // test Scheduler with String
  135.             Scheduler<String> scheduler = new Scheduler<>();
  136.             LocalDateTime now = LocalDateTime.now();
  137.             scheduler.add(new Timestamp<>(now.minusHours(2), jin.next()));
  138.             scheduler.add(new Timestamp<>(now.minusHours(1), jin.next()));
  139.             scheduler.add(new Timestamp<>(now.minusHours(4), jin.next()));
  140.             scheduler.add(new Timestamp<>(now.plusHours(2), jin.next()));
  141.             scheduler.add(new Timestamp<>(now.plusHours(4), jin.next()));
  142.             scheduler.add(new Timestamp<>(now.plusHours(1), jin.next()));
  143.             scheduler.add(new Timestamp<>(now.plusHours(5), jin.next()));
  144.             System.out.println(scheduler.next().getElement());
  145.             System.out.println(scheduler.last().getElement());
  146.             List<Timestamp<String>> result = scheduler.getAll(now.minusHours(3), now.plusHours(4).plusMinutes(15));
  147.             String out = result.stream().sorted().map(Timestamp::getElement).collect(Collectors.joining(", "));
  148.             System.out.println(out);
  149.         }
  150.         if (k == 4) {// test Scheduler with ints complex
  151.             Scheduler<Integer> scheduler = new Scheduler<>();
  152.             int counter = 0;
  153.             ArrayList<Timestamp<Integer>> forRemoval = new ArrayList<>();
  154.             while (jin.hasNextLong()) {
  155.                 Timestamp<Integer> ti = new Timestamp<>(ofEpochMS(jin.nextLong()), jin.nextInt());
  156.                 if ((counter & 7) == 0) {
  157.                     forRemoval.add(ti);
  158.                 }
  159.                 scheduler.add(ti);
  160.                 ++counter;
  161.             }
  162.             jin.next();
  163.  
  164.             while (jin.hasNextLong()) {
  165.                 LocalDateTime left = ofEpochMS(jin.nextLong());
  166.                 LocalDateTime right = ofEpochMS(jin.nextLong());
  167.                 List<Timestamp<Integer>> res = scheduler.getAll(left, right);
  168.                 Collections.sort(res);
  169.                 System.out.println(left + " <: " + print(res) + " >: " + right);
  170.             }
  171.             System.out.println("test");
  172.             List<Timestamp<Integer>> res = scheduler.getAll(ofEpochMS(0), ofEpochMS(Long.MAX_VALUE));
  173.             Collections.sort(res);
  174.             System.out.println(print(res));
  175.             forRemoval.forEach(scheduler::remove);
  176.             res = scheduler.getAll(ofEpochMS(0), ofEpochMS(Long.MAX_VALUE));
  177.             Collections.sort(res);
  178.             System.out.println(print(res));
  179.         }
  180.     }
  181.  
  182.     private static LocalDateTime ofEpochMS(long ms) {
  183.         return LocalDateTime.ofInstant(Instant.ofEpochMilli(ms), ZoneId.systemDefault());
  184.     }
  185.  
  186.     private static <T> String print(List<Timestamp<T>> res) {
  187.         if (res == null || res.size() == 0)
  188.             return "NONE";
  189.         return res.stream().map(each -> each.getElement().toString()).collect(Collectors.joining(", "));
  190.     }
  191. }
Advertisement
Add Comment
Please, Sign In to add comment