Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.15 KB | None | 0 0
  1. package com.javarush.test.level24.lesson09.task02;
  2.  
  3. import java.text.ChoiceFormat;
  4. import java.text.Format;
  5. import java.text.MessageFormat;
  6. import java.text.SimpleDateFormat;
  7. import java.util.*;
  8.  
  9. /* Знания - сила!
  10. 1. В методе sort написать компаратор для Stock:
  11. 1.1. Первичная сортировка по name в алфавитном порядке
  12. 1.2. Вторичная сортировка по дате без учета часов, минут, секунд (сверху самые новые), потом по прибыли от положительных к отрицательным
  13. ... open 125,64 and last 126,74 - тут прибыль = 126,74-125,64
  14. ... open 125,64 and last 123,43 - тут прибыль = 123,43-125,64
  15. 2. Разобраться с *Format-ами и исправить IllegalArgumentException. Подсказка - это одна строчка.
  16. Пример вывода:
  17. Fake Apple Inc. AAPL | 17-11-2025 open 125,64 and last 123,43
  18. Fake Oracle Corporation ORCL | 21-08-1989 closed 0,15
  19. */
  20. public class Solution
  21. {
  22. public static void main(String[] args)
  23. {
  24. List<Stock> stocks = getStocks();
  25. sort(stocks);
  26. Date actualDate = new Date();
  27. printStocks(stocks, actualDate);
  28. }
  29.  
  30. public static void printStocks(List<Stock> stocks, Date actualDate)
  31. {
  32. SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
  33.  
  34. double[] filelimits = {0d, actualDate.getTime()};
  35. String[] filepart = {"closed {4}", "open {2} and last {3}"};
  36.  
  37. ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
  38. Format[] testFormats = {null, null, dateFormat, fileform};
  39. MessageFormat pattform = new MessageFormat("{0} {1} | {5} {6}");
  40. pattform.setFormats(testFormats);
  41.  
  42. for (Stock stock : stocks)
  43. {
  44. String name = ((String) stock.get("name"));
  45. String symbol = (String) stock.get("symbol");
  46. double open = !stock.containsKey("open") ? 0 : ((double) stock.get("open"));
  47. double last = !stock.containsKey("last") ? 0 : ((double) stock.get("last"));
  48. double change = !stock.containsKey("change") ? 0 : ((double) stock.get("change"));
  49. Date date = (Date) stock.get("date");
  50. Object[] testArgs = {name, symbol, open, last, change, date, date.getTime()};
  51. System.out.println(pattform.format(testArgs));
  52. }
  53. }
  54.  
  55. public static void sort(List<Stock> list)
  56. {
  57. Collections.sort(list, new Comparator<Stock>()
  58. {
  59. public int compare(Stock stock1, Stock stock2)
  60. {
  61. int compareNames = ((String) stock1.get("name")).compareTo((String) stock2.get("name"));
  62. if (compareNames != 0)
  63. return compareNames;
  64. else
  65. {
  66. int compareDate = ((Date) stock1.get("date")).compareTo((Date) stock2.get("date"));
  67. if (compareDate != 0)
  68. return compareDate;
  69. else
  70. {
  71. Double change1;
  72. Double change2;
  73. if (stock1.containsKey("change"))
  74. {
  75. change1 = (Double) stock1.get("change");
  76. } else
  77. change1 = (Double) stock1.get("last") - (Double) stock1.get("open");
  78.  
  79. if (stock2.containsKey("change"))
  80. {
  81. change2 = (Double) stock2.get("change");
  82. } else
  83. change2 = (Double) stock2.get("last") - (Double) stock2.get("open");
  84.  
  85. int compareChanges = change2.compareTo(change1);
  86. if (compareChanges != 0)
  87. return compareChanges;
  88. else
  89. return 0;
  90. }
  91. }
  92. }
  93. });
  94. }
  95.  
  96. public static class Stock extends HashMap
  97. {
  98. public Stock(String name, String symbol, double open, double last)
  99. {
  100. put("name", name);
  101. put("symbol", symbol);
  102. put("open", open);
  103. put("last", last);
  104. put("date", getRandomDate(2020));
  105. }
  106.  
  107. public Stock(String name, String symbol, double change, Date date)
  108. {
  109. put("name", name);
  110. put("symbol", symbol);
  111. put("date", date);
  112. put("change", change);
  113. }
  114. }
  115.  
  116. public static List<Stock> getStocks()
  117. {
  118. List<Stock> stocks = new ArrayList();
  119.  
  120. stocks.add(new Stock("Fake Apple Inc.", "AAPL", 125.64, 123.43));
  121. stocks.add(new Stock("Fake Cisco Systems, Inc.", "CSCO", 25.84, 26.3));
  122. stocks.add(new Stock("Fake Google Inc.", "GOOG", 516.2, 512.6));
  123. stocks.add(new Stock("Fake Intel Corporation", "INTC", 21.36, 21.53));
  124. stocks.add(new Stock("Fake Level 3 Communications, Inc.", "LVLT", 5.55, 5.54));
  125. stocks.add(new Stock("Fake Microsoft Corporation", "MSFT", 29.56, 29.72));
  126.  
  127. stocks.add(new Stock("Fake Nokia Corporation (ADR)", "NOK", .1, getRandomDate()));
  128. stocks.add(new Stock("Fake Oracle Corporation", "ORCL", .15, getRandomDate()));
  129. stocks.add(new Stock("Fake Starbucks Corporation", "SBUX", .03, getRandomDate()));
  130. stocks.add(new Stock("Fake Yahoo! Inc.", "YHOO", .32, getRandomDate()));
  131. stocks.add(new Stock("Fake Applied Materials, Inc.", "AMAT", .26, getRandomDate()));
  132. stocks.add(new Stock("Fake Comcast Corporation", "CMCSA", .5, getRandomDate()));
  133. stocks.add(new Stock("Fake Sirius Satellite", "SIRI", -.03, getRandomDate()));
  134.  
  135. return stocks;
  136. }
  137.  
  138. public static Date getRandomDate()
  139. {
  140. return getRandomDate(1970);
  141. }
  142.  
  143. public static Date getRandomDate(int startYear)
  144. {
  145. int year = startYear + (int) (Math.random() * 30);
  146. int month = (int) (Math.random() * 12);
  147. int day = (int) (Math.random() * 28);
  148. GregorianCalendar calendar = new GregorianCalendar(year, month, day);
  149. return calendar.getTime();
  150. }
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement