Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.73 KB | None | 0 0
  1. package ba.unsa.etf.rpr;
  2.  
  3. import java.time.LocalDate;
  4. import java.time.LocalDateTime;
  5. import java.util.*;
  6. import java.util.function.BiFunction;
  7. import java.util.function.Predicate;
  8. import java.util.stream.Collectors;
  9.  
  10. public class Kalendar implements Pretrazivanje{
  11.  
  12. private List<Dogadjaj> kalendar = new ArrayList<>();
  13.  
  14. @Override
  15. public String toString() {
  16. return kalendar.stream()
  17. .map(Dogadjaj::toString)
  18. .collect(Collectors.joining("\n"));
  19. }
  20.  
  21. public void zakaziDogadjaj(Dogadjaj dogadjaj){
  22. kalendar.add(dogadjaj);
  23. }
  24.  
  25. public void otkaziDogadjaj(Dogadjaj dogadjaj){
  26. kalendar.remove(dogadjaj);
  27. }
  28.  
  29. public void zakaziDogadjaje(List<Dogadjaj> dogadjaji){
  30. kalendar.addAll(dogadjaji);
  31. }
  32.  
  33. public void otkaziDogadjaje(List<Dogadjaj> dogadjaji){
  34. kalendar.removeAll(dogadjaji);
  35. }
  36.  
  37. public void otkaziDogadjaje(Predicate<Dogadjaj> kriterij){
  38. List<Dogadjaj> zaOtkazati = kalendar.stream().filter(kriterij).collect(Collectors.toList());
  39. otkaziDogadjaje(zaOtkazati);
  40. }
  41.  
  42. public List<Dogadjaj> dajKalendar(){
  43. return kalendar;
  44. }
  45.  
  46. public Map<LocalDate, List<Dogadjaj>> dajKalendarPoDanima(){
  47. Map<LocalDate, List<Dogadjaj>> mapa = new HashMap<>();
  48. for (Dogadjaj dogadjaj : kalendar){
  49. if(!mapa.containsKey(dogadjaj.getPocetak().toLocalDate())){
  50. mapa.put(dogadjaj.getPocetak().toLocalDate(), new ArrayList<>());
  51. }
  52.  
  53. mapa.get(dogadjaj.getPocetak().toLocalDate()).add(dogadjaj);
  54. }
  55.  
  56. return mapa;
  57. }
  58.  
  59. Dogadjaj dajSljedeciDogadjaj(LocalDateTime datum){
  60. List<Dogadjaj> nakonDatuma = kalendar.stream().
  61. filter(dogadjaj -> dogadjaj.getPocetak().isAfter(datum)).collect(Collectors.toList());
  62.  
  63. if(nakonDatuma.isEmpty()){
  64. throw new IllegalArgumentException("Nemate događaja nakon navedenog datuma");
  65. }
  66.  
  67. Dogadjaj prvi = nakonDatuma.get(0);
  68. return nakonDatuma.stream().reduce(prvi, (d1,d2) -> d1.getPocetak().isBefore(d2.getPocetak()) ? d1 : d2);
  69. }
  70.  
  71. @Override
  72. public List<Dogadjaj> filtrirajPoKriteriju(Predicate<Dogadjaj> kriterij) {
  73. return kalendar.stream().filter(kriterij).collect(Collectors.toList());
  74. }
  75.  
  76. @Override
  77. public List<Dogadjaj> dajDogadjajeZaDan(LocalDateTime dan) {
  78. return kalendar.stream().filter(dogadjaj -> dogadjaj.getPocetak().toLocalDate().equals(dan.toLocalDate()))
  79. .collect(Collectors.toList());
  80. }
  81.  
  82. @Override
  83. public List<Dogadjaj> dajSortiraneDogadjaje(BiFunction<Dogadjaj, Dogadjaj, Integer> kriterijSortiranja) {
  84. return kalendar.stream().sorted(kriterijSortiranja::apply)
  85. .collect(Collectors.toList());
  86. }
  87.  
  88. @Override
  89. public Set<Dogadjaj> dajSortiranePoPrioritetu() {
  90. return new TreeSet<>(kalendar);
  91. }
  92.  
  93. @Override
  94. public boolean daLiSamSlobodan(LocalDateTime dan) {
  95. return kalendar.stream().
  96. noneMatch(d -> d.getPocetak().equals(dan) ||
  97. d.getKraj().equals(dan) ||
  98. (d.getPocetak().isBefore(dan)
  99. && d.getKraj().isAfter(dan)));
  100. }
  101.  
  102. @Override
  103. public boolean daLiSamSlobodan(LocalDateTime pocetak, LocalDateTime kraj) {
  104. if(pocetak.isAfter(kraj)){
  105. throw new IllegalArgumentException("Neispravni podaci o početku i kraju");
  106. }
  107.  
  108. return kalendar.stream()
  109. .noneMatch(d -> d.pocinjeIzmedju(pocetak, kraj)
  110. || d.zavrsavaIzmedju(pocetak, kraj)
  111. || d.trajeTokom(pocetak, kraj));
  112. }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement