Filip_Markoski

[NP] Распоредувач со Map

Dec 7th, 2017
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.64 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. class Scheduler<T> {
  4.     private TreeMap<Date, T> treeMap;
  5.  
  6.  
  7.     public Scheduler() {
  8.         treeMap = new TreeMap<>();
  9.     }
  10.  
  11.     void add(Date d, T t) {
  12.         treeMap.put(d, t);
  13.     }
  14.  
  15.     boolean remove(Date d) {
  16.         return treeMap.remove(d) != null;
  17.     }
  18.  
  19.     T next() {
  20.         /*
  21.         return scheduler.keySet().stream()
  22.                 .filter(date -> date.after(now))
  23.                 .treeMap(date -> scheduler.get(date))
  24.                 .reduce((left,right) -> left)
  25.                 .orElse(null);
  26.          */
  27.         Date now = new Date();
  28.         return treeMap.ceilingEntry(now).getValue();
  29.     }
  30.  
  31.  
  32.     T last() {
  33.         Date now = new Date();
  34.         return treeMap.floorEntry(now).getValue();
  35.     }
  36.  
  37.  
  38.     ArrayList<T> getAll(Date begin, Date end) {
  39.         return new ArrayList<T>(treeMap.subMap(begin, end).values());
  40.     }
  41.  
  42.     T getFirst() {
  43.         return treeMap.firstEntry().getValue();
  44.     }
  45.  
  46.     T getLast() {
  47.         return treeMap.lastEntry().getValue();
  48.     }
  49. }
  50.  
  51. public class SchedulerTest {
  52.     public static void main(String[] args) {
  53.         Scanner jin = new Scanner(System.in);
  54.         int k = jin.nextInt();
  55.         if (k == 0) {
  56.             Scheduler<String> scheduler = new Scheduler<String>();
  57.             Date now = new Date();
  58.             scheduler.add(new Date(now.getTime() - 7200000), jin.next());
  59.             scheduler.add(new Date(now.getTime() - 3600000), jin.next());
  60.             scheduler.add(new Date(now.getTime() - 14400000), jin.next());
  61.             scheduler.add(new Date(now.getTime() + 7200000), jin.next());
  62.             scheduler.add(new Date(now.getTime() + 14400000), jin.next());
  63.             scheduler.add(new Date(now.getTime() + 3600000), jin.next());
  64.             scheduler.add(new Date(now.getTime() + 18000000), jin.next());
  65.             System.out.println(scheduler.getFirst());
  66.             System.out.println(scheduler.getLast());
  67.         }
  68.         if (k == 3) { //test Scheduler with String
  69.             Scheduler<String> scheduler = new Scheduler<String>();
  70.             Date now = new Date();
  71.             scheduler.add(new Date(now.getTime() - 7200000), jin.next());
  72.             scheduler.add(new Date(now.getTime() - 3600000), jin.next());
  73.             scheduler.add(new Date(now.getTime() - 14400000), jin.next());
  74.             scheduler.add(new Date(now.getTime() + 7200000), jin.next());
  75.             scheduler.add(new Date(now.getTime() + 14400000), jin.next());
  76.             scheduler.add(new Date(now.getTime() + 3600000), jin.next());
  77.             scheduler.add(new Date(now.getTime() + 18000000), jin.next());
  78.             System.out.println(scheduler.next());
  79.             System.out.println(scheduler.last());
  80.             ArrayList<String> res = scheduler.getAll(new Date(now.getTime() - 10000000), new Date(now.getTime() + 17000000));
  81.             Collections.sort(res);
  82.             for (String t : res) {
  83.                 System.out.print(t + " , ");
  84.             }
  85.         }
  86.         if (k == 4) {//test Scheduler with ints complex
  87.             Scheduler<Integer> scheduler = new Scheduler<Integer>();
  88.             int counter = 0;
  89.             ArrayList<Date> to_remove = new ArrayList<Date>();
  90.  
  91.             while (jin.hasNextLong()) {
  92.                 Date d = new Date(jin.nextLong());
  93.                 int i = jin.nextInt();
  94.                 if ((counter & 7) == 0) {
  95.                     to_remove.add(d);
  96.                 }
  97.                 scheduler.add(d, i);
  98.                 ++counter;
  99.             }
  100.             jin.next();
  101.  
  102.             while (jin.hasNextLong()) {
  103.                 Date l = new Date(jin.nextLong());
  104.                 Date h = new Date(jin.nextLong());
  105.                 ArrayList<Integer> res = scheduler.getAll(l, h);
  106.                 Collections.sort(res);
  107.                 System.out.println(l + " <: " + print(res) + " >: " + h);
  108.             }
  109.             System.out.println("test");
  110.             ArrayList<Integer> res = scheduler.getAll(new Date(0), new Date(Long.MAX_VALUE));
  111.             Collections.sort(res);
  112.             System.out.println(print(res));
  113.             for (Date d : to_remove) {
  114.                 scheduler.remove(d);
  115.             }
  116.             res = scheduler.getAll(new Date(0), new Date(Long.MAX_VALUE));
  117.             Collections.sort(res);
  118.             System.out.println(print(res));
  119.         }
  120.     }
  121.  
  122.     private static <T> String print(ArrayList<T> res) {
  123.         if (res == null || res.size() == 0) return "NONE";
  124.         StringBuffer sb = new StringBuffer();
  125.         for (T t : res) {
  126.             sb.append(t + " , ");
  127.         }
  128.         return sb.substring(0, sb.length() - 3);
  129.     }
  130.  
  131.  
  132. }
Advertisement
Add Comment
Please, Sign In to add comment