Andziev

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

Dec 1st, 2016
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.80 KB | None | 0 0
  1. import java.util.Date;
  2. import java.util.ArrayList;
  3. import java.util.Scanner;
  4. import java.util.Collections;
  5. import java.util.HashMap;
  6.  
  7. class Scheduler<T> {
  8.     private HashMap <Date,T> map;
  9.  
  10.     public Scheduler () {
  11.         map = new HashMap <> ();
  12.     }
  13.     public void add (Date d, T t) {
  14.         map.put(d,t);
  15.     }
  16.     public boolean remove (Date d) {
  17.         if(map.containsKey(d)) {
  18.             map.remove(d);
  19.             return true;
  20.         }
  21.         return false;
  22.     }
  23.     public T next () {
  24.         Date now = new Date();
  25.         Date date = new Date();
  26.         T temp = null;
  27.         for(Date d : map.keySet()) {
  28.             if(d.after(now)) {
  29.                 if(temp == null) {
  30.                     temp = map.get(d);
  31.                     date = d;
  32.                 } else if (d.before(date)) {
  33.                     temp = map.get(d);
  34.                     date = d;
  35.                 }
  36.             }
  37.         }
  38.         return temp;
  39.     }
  40.     public T last () {
  41.         Date now = new Date();
  42.         Date date = new Date();
  43.         T temp = null;
  44.         for(Date d : map.keySet()) {
  45.             if(d.before(now)) {
  46.                 if(temp == null) {
  47.                     temp = map.get(d);
  48.                     date = d;
  49.                 } else if (d.after(date)) {
  50.                     temp = map.get(d);
  51.                     date = d;
  52.                 }
  53.             }
  54.         }
  55.         return temp;
  56.     }
  57.     public ArrayList <T> getAll (Date begin, Date end) {
  58.         ArrayList <T> list = new ArrayList <> ();
  59.         for(Date d : map.keySet()) {
  60.             if(d.after(begin)&&d.before (end))
  61.                 list.add(map.get(d));
  62.         }
  63.         return list;
  64.     }
  65.     public T getFirst () {
  66.         Date date = new Date();
  67.         T min = null;
  68.         for(Date d : map.keySet()) {
  69.             if(d.before(date)) {
  70.                 date = d;
  71.                 min = map.get(date);
  72.             }
  73.         }
  74.         return min;
  75.     }
  76.     public T getLast () {
  77.         Date date = new Date();
  78.         T max = null;
  79.         for(Date d : map.keySet()) {
  80.             if(d.after(date)) {
  81.                 date = d;
  82.                 max = map.get(date);
  83.             }
  84.         }
  85.         return max;
  86.     }
  87. }
  88.  
  89. public class SchedulerTest {
  90.  
  91.     public static void main(String[] args) {
  92.         Scanner jin = new Scanner(System.in);
  93.         int k = jin.nextInt();
  94.         if ( k == 0 ) {
  95.             Scheduler<String> scheduler = new Scheduler<String>();
  96.             Date now = new Date();
  97.             scheduler.add(new Date(now.getTime()-7200000), jin.next());
  98.             scheduler.add(new Date(now.getTime()-3600000), jin.next());
  99.             scheduler.add(new Date(now.getTime()-14400000), jin.next());
  100.             scheduler.add(new Date(now.getTime()+7200000), jin.next());
  101.             scheduler.add(new Date(now.getTime()+14400000), jin.next());
  102.             scheduler.add(new Date(now.getTime()+3600000), jin.next());
  103.             scheduler.add(new Date(now.getTime()+18000000), jin.next());
  104.             System.out.println(scheduler.getFirst());
  105.             System.out.println(scheduler.getLast());
  106.         }
  107.         if ( k == 3 ) { //test Scheduler with String
  108.             Scheduler<String> scheduler = new Scheduler<String>();
  109.             Date now = new Date();
  110.             scheduler.add(new Date(now.getTime()-7200000), jin.next());
  111.             scheduler.add(new Date(now.getTime()-3600000), jin.next());
  112.             scheduler.add(new Date(now.getTime()-14400000), jin.next());
  113.             scheduler.add(new Date(now.getTime()+7200000), jin.next());
  114.             scheduler.add(new Date(now.getTime()+14400000), jin.next());
  115.             scheduler.add(new Date(now.getTime()+3600000), jin.next());
  116.             scheduler.add(new Date(now.getTime()+18000000), jin.next());
  117.             System.out.println(scheduler.next());
  118.             System.out.println(scheduler.last());
  119.             ArrayList<String> res = scheduler.getAll(new Date(now.getTime()-10000000), new Date(now.getTime()+17000000));
  120.             Collections.sort(res);
  121.             for ( String t : res ) {
  122.                 System.out.print(t+" , ");
  123.             }
  124.         }
  125.         if ( k == 4 ) {//test Scheduler with ints complex
  126.             Scheduler<Integer> scheduler = new Scheduler<Integer>();
  127.             int counter = 0;
  128.             ArrayList<Date> to_remove = new ArrayList<Date>();
  129.  
  130.             while ( jin.hasNextLong() ) {
  131.                 Date d = new Date(jin.nextLong());
  132.                 int i = jin.nextInt();
  133.                 if ( (counter&7) == 0 ) {
  134.                     to_remove.add(d);
  135.                 }
  136.                 scheduler.add(d,i);
  137.                 ++counter;
  138.             }
  139.             jin.next();
  140.  
  141.             while ( jin.hasNextLong() ) {
  142.                 Date l = new Date(jin.nextLong());
  143.                 Date h = new Date(jin.nextLong());
  144.                 ArrayList<Integer> res = scheduler.getAll(l,h);
  145.                 Collections.sort(res);
  146.                 System.out.println(l+" <: "+print(res)+" >: "+h);
  147.             }
  148.             System.out.println("test");
  149.             ArrayList<Integer> res = scheduler.getAll(new Date(0),new Date(Long.MAX_VALUE));
  150.             Collections.sort(res);
  151.             System.out.println(print(res));
  152.             for ( Date d : to_remove ) {
  153.                 scheduler.remove(d);
  154.             }
  155.             res = scheduler.getAll(new Date(0),new Date(Long.MAX_VALUE));
  156.             Collections.sort(res);
  157.             System.out.println(print(res));
  158.         }
  159.     }
  160.  
  161.     private static <T> String print(ArrayList<T> res) {
  162.         if ( res == null || res.size() == 0 ) return "NONE";
  163.         StringBuffer sb = new StringBuffer();
  164.         for ( T t : res ) {
  165.             sb.append(t+" , ");
  166.         }
  167.         return sb.substring(0, sb.length()-3);
  168.     }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment