Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.97 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////////////////////////
  2. public static Osoba fromString(String string) {
  3. String[] podaci = string.split("\\|");
  4. if (podaci.length % 8 != 0) {
  5. throw new IllegalArgumentException();
  6. }
  7. Osoba osoba = fromString(podaci[0], podaci[1], podaci[2], podaci[3], podaci[4], podaci[5], podaci[6]);
  8. try {
  9. int brDece = Integer.parseInt(podaci[7]);
  10. Osoba[] deca = new Osoba[brDece];
  11. for (int i = 0; i < brDece; i++) {
  12. deca[i] = fromString(podaci[8 * i + 0], podaci[8 * i + 1], podaci[8 * i + 2], podaci[8 * i + 3], podaci[8 * i + 4], podaci[8 * i + 5], podaci[8 * i + 6]);
  13. }
  14. return new Osoba(osoba.ime, osoba.prezime, osoba.pol, osoba.datumRodjenja, osoba.mestoRodjenja, osoba.mestoStanovanja, osoba.primanja, deca);
  15. } catch (NumberFormatException e) {
  16. throw new IllegalArgumentException(e);
  17. }
  18. }
  19.  
  20. private static Osoba fromString(String... podaci) {
  21. try {
  22. return new Osoba(podaci[0], podaci[1], Pol.valueOf(podaci[2]), LocalDate.parse(podaci[3]), podaci[4], podaci[5], Integer.parseInt(podaci[6]));
  23. } catch (NullPointerException | DateTimeParseException | NumberFormatException | IndexOutOfBoundsException e) {
  24. throw new IllegalArgumentException(e);
  25. }
  26. }
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33. public static Patuljak fromString(String string) {
  34. String[] podaci = string.split(";");
  35. return new Patuljak(podaci[0], Integer.parseInt(podaci[1]), Integer.parseInt(podaci[2]), Double.parseDouble(podaci[3]));
  36. }
  37.  
  38.  
  39.  
  40. /////////////////////////////////////////////////////////////////////////////////////////////////
  41.  
  42.  
  43. private static void naslov(String naslov) {
  44. System.out.println();
  45. System.out.println(naslov);
  46. System.out.println(naslov.replaceAll(".", "="));
  47. }
  48.  
  49. private static void svi() {
  50. Osobe.osobeStream(5000)
  51. .forEach(System.out::println);
  52. }
  53.  
  54. private static void punoDece() {
  55. Osobe.osobeStream(5000)
  56. .filter(o -> o.getDeca().size() > 2)
  57. .map(o -> o.getIme() + " " + o.getPrezime())
  58. .forEach(System.out::println);
  59. }
  60.  
  61. private static void istoMesto() {
  62. Osobe.osobeStream(5000)
  63. .filter(o -> o.getMestoStanovanja().equals(o.getMestoRodjenja()))
  64. .sorted(Comparator.comparing(Osoba::getMestoStanovanja))
  65. .map(o -> o.getIme() + " " + o.getPrezime() + " (" + o.getMestoStanovanja() + ")")
  66. .forEach(System.out::println);
  67. }
  68.  
  69. private static void bogateBezDece() {
  70. Osobe.osobeStream(5000)
  71. .filter(o -> o.getPol() == Pol.ZENSKI)
  72. .filter(o -> o.getPrimanja() > 75_000)
  73. .filter(o -> o.getDeca().isEmpty())
  74. .sorted(Comparator.comparing(Osoba::getPrimanja).reversed())
  75. .map(o -> String.format("%s %s (%d)", o.getIme(), o.getPrezime(), o.getPrimanja()))
  76. .forEach(System.out::println);
  77. }
  78.  
  79. private static void rodjendani() {
  80. LocalDate sad = LocalDate.now();
  81. DateTimeFormatter format = DateTimeFormatter.ofPattern("dd.MM.");
  82. Comparator<Osoba> poDanu = Comparator.comparing(o -> o.getDatumRodjenja().getDayOfMonth());
  83. Comparator<Osoba> poGodini = Comparator.comparing(o -> o.getDatumRodjenja().getYear());
  84. Comparator<Osoba> poPrezimenu = Comparator.comparing(Osoba::getPrezime);
  85. Comparator<Osoba> poImenu = Comparator.comparing(Osoba::getIme);
  86. Comparator<Osoba> poredak = poDanu
  87. .thenComparing(poGodini.reversed())
  88. .thenComparing(poPrezimenu)
  89. .thenComparing(poImenu);
  90. Osobe.osobeStream(5000)
  91. .filter(o -> o.getDatumRodjenja().getMonth() == sad.getMonth())
  92. .sorted(poredak) // Ovo se nije trazilo u zadatku
  93. .map(o -> String.format("%s %s %s (%d)",
  94. format.format(o.getDatumRodjenja()),
  95. o.getIme(),
  96. o.getPrezime(),
  97. sad.getYear() - o.getDatumRodjenja().getYear()))
  98. .forEach(System.out::println);
  99. }
  100.  
  101. private static void odrasli(String prezime) {
  102. long br = Osobe.osobeStream(5000)
  103. .filter(o -> o.getPrezime().equals(prezime))
  104. .count();
  105. System.out.println(br);
  106. }
  107.  
  108. private static void ukupnoDece() {
  109. long br = Osobe.osobeStream(5000)
  110. .flatMap(o -> o.getDeca().stream())
  111. .count();
  112. System.out.println(br);
  113. }
  114.  
  115. private static void zaPaketice() {
  116. LocalDate sad = LocalDate.now();
  117. Osobe.osobeStream(5000)
  118. .flatMap(o -> o.getDeca().stream())
  119. .filter(o -> o.getDatumRodjenja().getYear() >= 2000)
  120. .filter(o -> o.getDatumRodjenja().getYear() <= 2010)
  121. .map(o -> String.format("%s %s (%d)",
  122. o.getIme(),
  123. o.getPrezime(),
  124. o.getDatumRodjenja().until(sad).getYears()))
  125. .forEach(System.out::println);
  126. }
  127.  
  128. private static void imenaPenzionera() {
  129. LocalDate sad = LocalDate.now();
  130. Osobe.osobeStream(5000)
  131. .filter(o -> o.getDatumRodjenja().until(sad).getYears() >= 65)
  132. .map(Osoba::getIme)
  133. .distinct()
  134. .sorted()
  135. .forEach(System.out::println);
  136. }
  137.  
  138. private static void procenat() {
  139. long brOdraslih = Osobe.osobeStream(5000)
  140. .count();
  141. long brOdraslihM = Osobe.osobeStream(5000)
  142. .filter(o -> o.getPol() == Pol.MUSKI)
  143. .count();
  144. long brDece = Osobe.osobeStream(5000)
  145. .flatMap(o -> o.getDeca().stream())
  146. .count();
  147. long brDeceM = Osobe.osobeStream(5000)
  148. .flatMap(o -> o.getDeca().stream())
  149. .filter(o -> o.getPol() == Pol.MUSKI)
  150. .count();
  151. double procenat = 100.0 * (brOdraslihM + brDeceM) / (brOdraslih + brDece);
  152. System.out.printf("%8.5f%%%n", procenat);
  153. }
  154.  
  155. private static void procenat2() {
  156. Osobe.osobeStream(5000)
  157. .flatMap(o -> Stream.concat(
  158. Stream.of(o),
  159. o.getDeca().stream()))
  160. .mapToDouble(o -> o.getPol() == Pol.MUSKI ? 100.0 : 0.0)
  161. .average()
  162. .ifPresent(d -> System.out.printf("%8.5f%%%n", d));
  163. }
  164.  
  165. private static void trecaPoRedu() {
  166. Osobe.osobeStream(5000)
  167. .sorted(Comparator.comparing((Osoba o) -> o.getBrDece(Pol.MUSKI)).reversed())
  168. .skip(2)
  169. .limit(1)
  170. .forEach(System.out::println);
  171. }
  172.  
  173. private static void najbogatiji(String grad) {
  174. Osobe.osobeStream(5000)
  175. .filter(o -> o.getMestoStanovanja().equals(grad))
  176. .sorted(Comparator.comparing(Osoba::getPrimanja).reversed())
  177. .limit(1)
  178. .map(o -> String.format("%s %s (%s)",
  179. o.getIme(),
  180. o.getPrimanja(),
  181. o.getMestoRodjenja()))
  182. .forEach(System.out::println);
  183. }
  184.  
  185. private static void josBogatiji(String grad) {
  186. int granica = Osobe.osobeStream(5000)
  187. .filter(o -> o.getMestoStanovanja().equals(grad))
  188. .sorted(Comparator.comparing(Osoba::getPrimanja).reversed())
  189. .mapToInt(Osoba::getPrimanja)
  190. .limit(1)
  191. .sum();
  192. Osobe.osobeStream(5000)
  193. .filter(o -> !o.getMestoStanovanja().equals(grad))
  194. .filter(o -> o.getPrimanja() > granica)
  195. .sorted(Comparator.comparing(Osoba::getPrimanja))
  196. .map(o -> String.format("%s (%s) %s",
  197. o.getIme(),
  198. o.getPrimanja(),
  199. o.getMestoStanovanja()))
  200. .forEach(System.out::println);
  201. }
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215. private final List<Patuljak> patuljci = new ArrayList<>();
  216.  
  217. public void dodaj(Patuljak p) {
  218. patuljci.add(p);
  219. }
  220.  
  221. public int brPatuljaka() {
  222. return (int) patuljci.stream()
  223. .count();
  224. }
  225.  
  226. public double prosecnoIskopaliZlata() {
  227. return patuljci.stream()
  228. .mapToDouble(Patuljak::getIskopaoZlata)
  229. .average()
  230. .orElse(Double.NaN);
  231. }
  232.  
  233. public double ukupnoIskopaliZlataOniNaSlovo(char slovo) {
  234. return patuljci.stream()
  235. .filter(p -> p.getIme().startsWith(String.valueOf(slovo)))
  236. .mapToDouble(Patuljak::getIskopaoZlata)
  237. .sum();
  238. }
  239.  
  240. public Patuljak najbogatiji() {
  241. return patuljci.stream()
  242. .max(Comparator.comparing(Patuljak::getIskopaoZlata))
  243. .orElse(null);
  244. }
  245.  
  246. public Patuljak drugiNajbogatiji() {
  247. return patuljci.stream()
  248. .sorted(Comparator.comparing(Patuljak::getIskopaoZlata).reversed())
  249. .skip(1)
  250. .findFirst()
  251. .orElse(null);
  252. }
  253.  
  254. public int ukupnoUbiliGoblina(Predicate<Patuljak> p) {
  255. return patuljci.stream()
  256. .filter(p)
  257. .mapToInt(Patuljak::getUbioGoblina)
  258. .sum();
  259. }
  260.  
  261. public List<Patuljak> opadajuceSortiraniPoBrojuUbijenihGoblina() {
  262. return patuljci.stream()
  263. .sorted(Comparator.comparing(Patuljak::getUbioGoblina).reversed())
  264. .collect(Collectors.toList());
  265. }
  266.  
  267. public Set<Patuljak> patuljciStarijiOd(int godina) {
  268. int ovaGodina = LocalDate.now().getYear();
  269. return patuljci.stream()
  270. .filter(p -> ovaGodina - p.getGodinaRodjenja() > godina)
  271. .collect(Collectors.toSet());
  272. }
  273.  
  274. public List<String> imenaPatuljakaRastuceSortiranaPoPrezimenu() {
  275. return patuljci.stream()
  276. .map(Patuljak::getIme)
  277. .sorted(Comparator.comparing(s -> s.split(" |$", 2)[1]))
  278. .map(s -> s.split(" ")[0])
  279. .collect(Collectors.toList());
  280. }
  281.  
  282. public Map<Integer, Set<Patuljak>> patuljciRazvrstaniPoGodiniRodjenja() {
  283. return patuljci.stream()
  284. .collect(Collectors.groupingBy(Patuljak::getGodinaRodjenja, Collectors.toSet()));
  285. }
  286.  
  287. public Map<Integer, Set<Patuljak>> patuljciRazvrstaniPoVekuRodjenja() {
  288. return patuljci.stream()
  289. .collect(Collectors.groupingBy(p -> p.getGodinaRodjenja() / 100 + 1, Collectors.toSet()));
  290. }
  291.  
  292. public boolean postojiPatuljakSaViseZlataOd(double granica) {
  293. return patuljci.stream()
  294. .anyMatch(p -> p.getIskopaoZlata() > granica);
  295. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement