Advertisement
Martina312

[НП] - Распоредувач на задачи

Aug 20th, 2020
946
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.36 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.Comparator;
  3. import java.util.List;
  4. import java.util.Scanner;
  5. import java.util.stream.Collectors;
  6.  
  7. /**
  8.  * I Partial exam 2016
  9.  */
  10. public class TaskSchedulerTest {
  11.     public static void main(String[] args) {
  12.         Scanner scanner = new Scanner(System.in);
  13.         int n = scanner.nextInt();
  14.         Task[] timeTasks = new Task[n];
  15.         for (int i = 0; i < n; ++i) {
  16.             int x = scanner.nextInt();
  17.             timeTasks[i] = new TimedTask(x);
  18.         }
  19.         n = scanner.nextInt();
  20.         Task[] priorityTasks = new Task[n];
  21.         for (int i = 0; i < n; ++i) {
  22.             int x = scanner.nextInt();
  23.             priorityTasks[i] = new PriorityTask(x);
  24.         }
  25.         Arrays.stream(priorityTasks).forEach(System.out::println);
  26.         TaskRunner<Task> runner = new TaskRunner<>();
  27.         System.out.println("=== Ordered tasks ===");
  28.         System.out.println("Timed tasks");
  29.         runner.run(Schedulers.getOrdered(), timeTasks);
  30.         System.out.println("Priority tasks");
  31.         runner.run(Schedulers.getOrdered(), priorityTasks);
  32.         int filter = scanner.nextInt();
  33.         System.out.printf("=== Filtered time tasks with order less then %d ===\n", filter);
  34.         runner.run(Schedulers.getFiltered(filter), timeTasks);
  35.         System.out.printf("=== Filtered priority tasks with order less then %d ===\n", filter);
  36.         runner.run(Schedulers.getFiltered(filter), priorityTasks);
  37.         scanner.close();
  38.     }
  39. }
  40.  
  41. class TaskRunner <T extends Task>{
  42.     public void run(TaskScheduler<T> scheduler, T[] tasks) {
  43.         List<T> order = scheduler.schedule(tasks);
  44.         order.forEach(System.out::println);
  45.         }
  46.     }
  47.  
  48. interface TaskScheduler<T extends Task>{ //dali treb T
  49.     List<T> schedule (T [] tasks); //prima niza na zadaci i vrakja lista na zadaci rasporedeni soglasno kriterium
  50. }
  51.  
  52. interface Task {
  53.     int getOrder(); //metod koj vrakja reden broj na zadacata za izvrsuvanje
  54. }
  55.  
  56. class PriorityTask implements Task {
  57.     private final int priority;
  58.  
  59.     public PriorityTask(int priority) {
  60.         this.priority = priority;
  61.     }
  62.  
  63.  
  64.     @Override
  65.     public String toString() {
  66.         return String.format("PT -> %d", getOrder());
  67.     }
  68.  
  69.     @Override
  70.     public int getOrder() {
  71.         return this.priority;
  72.     }
  73. }
  74.  
  75. class TimedTask implements Task {
  76.     private final int time;
  77.  
  78.     public TimedTask(int time) {
  79.         this.time = time;
  80.     }
  81.  
  82.  
  83.     @Override
  84.     public String toString() {
  85.         return String.format("TT -> %d", getOrder());
  86.     }
  87.  
  88.     @Override
  89.     public int getOrder() {
  90.         return this.time;
  91.     }
  92. }
  93.  
  94. class Schedulers {
  95.     public static <T extends Task> TaskScheduler<T> getOrdered() {
  96.  
  97.         // vashiot kod ovde (annonimous class)
  98.         return new TaskScheduler<T>() {
  99.             @Override
  100.             public List<T> schedule(T[] tasks) {
  101.                 return Arrays.stream(tasks).sorted(Comparator.comparing(Task::getOrder)).collect(Collectors.toList());
  102.             }
  103.         };
  104.  
  105.     }
  106.  
  107.     public static <T extends Task> TaskScheduler<T> getFiltered(int order) {
  108.  
  109.         // vashiot kod ovde (lambda expression)
  110.         TaskScheduler<T> taskScheduler = null;
  111.  
  112.         return taskScheduler = tasks -> Arrays.stream(tasks).filter(t -> t.getOrder() <=order).collect(Collectors.toList());
  113.     }
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement