Advertisement
SashkoKlincharov

[Java][НП] - Распоредувач со Map

Aug 26th, 2021
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.75 KB | None | 0 0
  1.  
  2.  
  3. Оваа задача е многу слична како задачата од лабараториска вежба 4 задача број 2 - меѓутоа сега ќе користите мапа за да ја имплементирате класата Sheduler и НЕ ви треба класата Timestamp.
  4.  
  5. Потсетување за задачата: Да се развие класа Scheduler. Оваа класа чува објекти од генерички тип T кои единствено се референцираат преку време (објект од класата Date). Класата треба да ги имплементира следниве методи:
  6.  
  7. Sheduler() - креира нов празен распоредувач
  8. add(Date d, T t) - додава нов објект во распоредувачот
  9. remove(Date d):boolean - го брише соодветниот елемент од распоредувачот доколку постои и враќа true, во спротивно враќа false
  10. next():T - го враќа следниот објект, односно тој објект кој е асоциран со дата најблиска до тековната и сеуште не е помината
  11. last():T - го враќа следниот објект, односно тој објект кој е асоциран со дата најблиска до тековната и веќе е помината
  12. getAll(Date begin,Date end):ArrayList<Т> - враќа листа на објекти чии дати се наоѓаат помеѓу begin и end.
  13.  
  14. _Забелешка_: Два објекти НЕ може да имаат исто време.
  15.  
  16. Имплементирајте и два дополнителни методи:
  17.  
  18. getFirst():Т - го враќа објектот асоциран со најмала дата (севкупно)
  19. getLast():Т - го враќа објектот асоциран со најголема дата (севкупно)
  20.  
  21.  
  22. import java.time.LocalDateTime;
  23. import java.util.*;
  24. import java.util.stream.Collectors;
  25.  
  26. class Scheduler<T> {
  27. private Map<Date, T> map;
  28.  
  29. public Scheduler() {
  30. map = new TreeMap<>();
  31. }
  32.  
  33. public void add(Date d, T t) {
  34. map.putIfAbsent(d, (T) new Object());
  35. map.computeIfPresent(d, (k, v) -> t);
  36. }
  37.  
  38. public boolean remove(Date d) {
  39. if (!map.containsKey(d))
  40. return false;
  41. map.remove(d);
  42. return true;
  43. }
  44.  
  45. public T next() {
  46. Date date = new Date();
  47. return map
  48. .keySet()
  49. .stream()
  50. .filter(each -> each.after(date)).map(each -> map.get(each))
  51. .reduce((left,right) -> left).orElse(null);
  52. }
  53.  
  54. public T last(){
  55. Date date = new Date();
  56. return map
  57. .keySet()
  58. .stream()
  59. .filter(each -> each.before(date))
  60. .map(each -> map.get(each))
  61. .reduce((left,right)->right).orElse(null);
  62. }
  63.  
  64. public ArrayList<T> getAll(Date begin, Date end){
  65. return (ArrayList<T>) map.keySet().stream().filter(d -> d.after(begin)&&d.before(end)).map(each -> map.get(each)).collect(Collectors.toList());
  66. }
  67.  
  68. public T getFirst(){
  69. return map.keySet().stream().findFirst().map(each -> map.get(each)).orElse(null);
  70. }
  71. public T getLast(){
  72. return map.keySet().stream().reduce((left,right)->right).map(each -> map.get(each)).orElse(null);
  73.  
  74. }
  75. }
  76.  
  77. public class SchedulerTest {
  78.  
  79.  
  80.  
  81. public static void main(String[] args) {
  82. Scanner jin = new Scanner(System.in);
  83. int k = jin.nextInt();
  84. if (k == 0) {
  85. Scheduler<String> scheduler = new Scheduler<String>();
  86. Date now = new Date();
  87. scheduler.add(new Date(now.getTime() - 7200000), jin.next());
  88. scheduler.add(new Date(now.getTime() - 3600000), jin.next());
  89. scheduler.add(new Date(now.getTime() - 14400000), jin.next());
  90. scheduler.add(new Date(now.getTime() + 7200000), jin.next());
  91. scheduler.add(new Date(now.getTime() + 14400000), jin.next());
  92. scheduler.add(new Date(now.getTime() + 3600000), jin.next());
  93. scheduler.add(new Date(now.getTime() + 18000000), jin.next());
  94. System.out.println(scheduler.getFirst());
  95. System.out.println(scheduler.getLast());
  96. }
  97. if (k == 3) { //test Scheduler with String
  98. Scheduler<String> scheduler = new Scheduler<String>();
  99. Date now = new Date();
  100. scheduler.add(new Date(now.getTime() - 7200000), jin.next());
  101. scheduler.add(new Date(now.getTime() - 3600000), jin.next());
  102. scheduler.add(new Date(now.getTime() - 14400000), jin.next());
  103. scheduler.add(new Date(now.getTime() + 7200000), jin.next());
  104. scheduler.add(new Date(now.getTime() + 14400000), jin.next());
  105. scheduler.add(new Date(now.getTime() + 3600000), jin.next());
  106. scheduler.add(new Date(now.getTime() + 18000000), jin.next());
  107. System.out.println(scheduler.next());
  108. System.out.println(scheduler.last());
  109. ArrayList<String> res = scheduler.getAll(new Date(now.getTime() - 10000000), new Date(now.getTime() + 17000000));
  110. Collections.sort(res);
  111. for (String t : res) {
  112. System.out.print(t + " , ");
  113. }
  114. }
  115. if (k == 4) {//test Scheduler with ints complex
  116. Scheduler<Integer> scheduler = new Scheduler<Integer>();
  117. int counter = 0;
  118. ArrayList<Date> to_remove = new ArrayList<Date>();
  119.  
  120. while (jin.hasNextLong()) {
  121. Date d = new Date(jin.nextLong());
  122. int i = jin.nextInt();
  123. if ((counter & 7) == 0) {
  124. to_remove.add(d);
  125. }
  126. scheduler.add(d, i);
  127. ++counter;
  128. }
  129. jin.next();
  130.  
  131. while (jin.hasNextLong()) {
  132. Date l = new Date(jin.nextLong());
  133. Date h = new Date(jin.nextLong());
  134. ArrayList<Integer> res = scheduler.getAll(l, h);
  135. Collections.sort(res);
  136. System.out.println(l + " <: " + print(res) + " >: " + h);
  137. }
  138. System.out.println("test");
  139. ArrayList<Integer> res = scheduler.getAll(new Date(0), new Date(Long.MAX_VALUE));
  140. Collections.sort(res);
  141. System.out.println(print(res));
  142. for (Date d : to_remove) {
  143. scheduler.remove(d);
  144. }
  145. res = scheduler.getAll(new Date(0), new Date(Long.MAX_VALUE));
  146. Collections.sort(res);
  147. System.out.println(print(res));
  148. }
  149. }
  150.  
  151. private static <T> String print(ArrayList<T> res) {
  152. if (res == null || res.size() == 0) return "NONE";
  153. StringBuffer sb = new StringBuffer();
  154. for (T t : res) {
  155. sb.append(t + " , ");
  156. }
  157. return sb.substring(0, sb.length() - 3);
  158. }
  159.  
  160.  
  161. }
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169. Sample Input
  170.  
  171. 4
  172. 873961200000 1
  173. 875649600000 2
  174. 875955600000 3
  175. 876042000000 4
  176. 876146400000 5
  177. 877068000000 6
  178. 878940000000 7
  179. 881013600000 8
  180. 881802000000 9
  181. 891928800000 10
  182. query
  183. 867482800000 1744289600000
  184. 879722800000 1752688400000
  185.  
  186.  
  187. Sample Output
  188.  
  189. Sat Jun 28 07:26:40 GMT 1997 <: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 >: Thu Apr 10 12:53:20 GMT 2025
  190. Sun Nov 16 23:26:40 GMT 1997 <: 8 , 9 , 10 >: Wed Jul 16 17:53:20 GMT 2025
  191. test
  192. 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10
  193. 2 , 3 , 4 , 5 , 6 , 7 , 8 , 10
  194.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement