kristina7

НП - Лаб 6-1 Распоредувач со Map

Jan 3rd, 2019
763
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.61 KB | None | 0 0
  1. /*
  2. Оваа задача е многу слична како задачата од лабараториска вежба 4 задача број 2 - меѓутоа сега ќе користите мапа за да ја имплементирате класата Sheduler и НЕ ви треба класата Timestamp.
  3.  
  4. Потсетување за задачата: Да се развие класа Scheduler. Оваа класа чува објекти од генерички тип T кои единствено се референцираат преку време (објект од класата Date). Класата треба да ги имплементира следниве методи:
  5.  
  6. Sheduler() - креира нов празен распоредувач
  7. add(Date d, T t) - додава нов објект во распоредувачот
  8. remove(Date d):boolean - го брише соодветниот елемент од распоредувачот доколку постои и враќа true, во спротивно враќа false
  9. next():T - го враќа следниот објект, односно тој објект кој е асоциран со дата најблиска до тековната и сеуште не е помината
  10. last():T - го враќа следниот објект, односно тој објект кој е асоциран со дата најблиска до тековната и веќе е помината
  11. getAll(Date begin,Date end):ArrayList<Т> - враќа листа на објекти чии дати се наоѓаат помеѓу begin и end.
  12. _Забелешка_: Два објекти НЕ може да имаат исто време.
  13.  
  14. Имплементирајте и два дополнителни методи:
  15.  
  16. getFirst():Т - го враќа објектот асоциран со најмала дата (севкупно)
  17. getLast():Т - го враќа објектот асоциран со најголема дата (севкупно)
  18. */
  19.  
  20. import java.time.Instant;
  21. import java.util.*;
  22.  
  23. class Scheduler<T> {
  24.     TreeMap<Date, T> timestamps;
  25.     public Scheduler() {
  26.         timestamps = new TreeMap<>();
  27.     }
  28.     public void add(Date d, T t) {
  29.         timestamps.put(d, t);
  30.     }
  31.     public boolean remove(Date d) {
  32.         return timestamps.remove(d) != null;
  33.     }
  34.     public T next() {
  35.         return timestamps.ceilingEntry(Date.from(Instant.now())).getValue();
  36.     }
  37.     public T last() {
  38.         return timestamps.floorEntry(Date.from(Instant.now())).getValue();
  39.     }
  40.     public ArrayList<T> getAll(Date begin,Date end) {
  41.         ArrayList<T> result = new ArrayList<>();
  42.         timestamps.entrySet().forEach((entry) -> {
  43.             if(entry.getKey().after(begin)&&entry.getKey().before(end))
  44.                 result.add(entry.getValue());
  45.         });
  46.         return result;
  47.     }
  48.     public T getFirst() {
  49.         return timestamps.firstEntry().getValue();
  50.     }
  51.     public T getLast() {
  52.         return timestamps.lastEntry().getValue();
  53.     }
  54. }
  55.  
  56. public class SchedulerTest {
  57.  
  58.     public static void main(String[] args) {
  59.         Scanner jin = new Scanner(System.in);
  60.         int k = jin.nextInt();
  61.         if ( k == 0 ) {
  62.             Scheduler<String> scheduler = new Scheduler<String>();
  63.             Date now = new Date();
  64.             scheduler.add(new Date(now.getTime()-7200000), jin.next());
  65.             scheduler.add(new Date(now.getTime()-3600000), jin.next());
  66.             scheduler.add(new Date(now.getTime()-14400000), jin.next());
  67.             scheduler.add(new Date(now.getTime()+7200000), jin.next());
  68.             scheduler.add(new Date(now.getTime()+14400000), jin.next());
  69.             scheduler.add(new Date(now.getTime()+3600000), jin.next());
  70.             scheduler.add(new Date(now.getTime()+18000000), jin.next());
  71.             System.out.println(scheduler.getFirst());
  72.             System.out.println(scheduler.getLast());
  73.         }
  74.         if ( k == 3 ) { //test Scheduler with String
  75.             Scheduler<String> scheduler = new Scheduler<String>();
  76.             Date now = new Date();
  77.             scheduler.add(new Date(now.getTime()-7200000), jin.next());
  78.             scheduler.add(new Date(now.getTime()-3600000), jin.next());
  79.             scheduler.add(new Date(now.getTime()-14400000), jin.next());
  80.             scheduler.add(new Date(now.getTime()+7200000), jin.next());
  81.             scheduler.add(new Date(now.getTime()+14400000), jin.next());
  82.             scheduler.add(new Date(now.getTime()+3600000), jin.next());
  83.             scheduler.add(new Date(now.getTime()+18000000), jin.next());
  84.             System.out.println(scheduler.next());
  85.             System.out.println(scheduler.last());
  86.             ArrayList<String> res = scheduler.getAll(new Date(now.getTime()-10000000), new Date(now.getTime()+17000000));
  87.             Collections.sort(res);
  88.             for ( String t : res ) {
  89.                 System.out.print(t+" , ");
  90.             }
  91.         }
  92.         if ( k == 4 ) {//test Scheduler with ints complex
  93.             Scheduler<Integer> scheduler = new Scheduler<Integer>();
  94.             int counter = 0;
  95.             ArrayList<Date> to_remove = new ArrayList<Date>();
  96.  
  97.             while ( jin.hasNextLong() ) {
  98.                 Date d = new Date(jin.nextLong());
  99.                 int i = jin.nextInt();
  100.                 if ( (counter&7) == 0 ) {
  101.                     to_remove.add(d);
  102.                 }
  103.                 scheduler.add(d,i);
  104.                 ++counter;
  105.             }
  106.             jin.next();
  107.  
  108.             while ( jin.hasNextLong() ) {
  109.                 Date l = new Date(jin.nextLong());
  110.                 Date h = new Date(jin.nextLong());
  111.                 ArrayList<Integer> res = scheduler.getAll(l,h);
  112.                 Collections.sort(res);
  113.                 System.out.println(l+" <: "+print(res)+" >: "+h);
  114.             }
  115.             System.out.println("test");
  116.             ArrayList<Integer> res = scheduler.getAll(new Date(0),new Date(Long.MAX_VALUE));
  117.             Collections.sort(res);
  118.             System.out.println(print(res));
  119.             for ( Date d : to_remove ) {
  120.                 scheduler.remove(d);
  121.             }
  122.             res = scheduler.getAll(new Date(0),new Date(Long.MAX_VALUE));
  123.             Collections.sort(res);
  124.             System.out.println(print(res));
  125.         }
  126.     }
  127.  
  128.     private static <T> String print(ArrayList<T> res) {
  129.         if ( res == null || res.size() == 0 ) return "NONE";
  130.         StringBuffer sb = new StringBuffer();
  131.         for ( T t : res ) {
  132.             sb.append(t+" , ");
  133.         }
  134.         return sb.substring(0, sb.length()-3);
  135.     }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment