kalinikov

04. Anonymous Cache

Dec 2nd, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class AnonymousCache {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6.  
  7. String input = scanner.nextLine();
  8.  
  9. Map<String, List<String>> sets = new LinkedHashMap<>();
  10. Map<String, Long> sizes = new HashMap<>();
  11. Map<String, List<String>> cacheSets = new LinkedHashMap<>();
  12. Map<String, Long> cashSizes = new HashMap<>();
  13.  
  14. while (!input.equals("thetinggoesskrra")) {
  15. if (!input.contains("-")) {
  16. String dataSet = input;
  17. if (!sets.containsKey(dataSet)) {
  18. if (!cacheSets.containsKey(dataSet)) {
  19. sets.put(dataSet, new ArrayList<>());
  20. sizes.put(dataSet, 0L);
  21. } else {
  22. sets.put(dataSet, cacheSets.get(dataSet));
  23. sizes.put(dataSet, cashSizes.get(dataSet));
  24. cacheSets.remove(dataSet);
  25. cashSizes.remove(dataSet);
  26. }
  27. }
  28. } else {
  29. String[] tokens = input.split(" -> ");
  30. String dataKey = tokens[0];
  31. String[] tokens2 = tokens[1].split(" \\| ");
  32. long dataSize = Long.parseLong(tokens2[0]);
  33. String dataSet = tokens2[1];
  34. if (!sets.containsKey(dataSet)) {
  35. if (!cacheSets.containsKey(dataSet)) {
  36. cacheSets.put(dataSet, new ArrayList<>());
  37. cacheSets.get(dataSet).add(dataKey);
  38. cashSizes.put(dataSet, dataSize);
  39. } else {
  40. cacheSets.get(dataSet).add(dataKey);
  41. cacheSets.put(dataSet, cacheSets.get(dataSet));
  42. cashSizes.put(dataSet, cashSizes.get(dataSet) + dataSize);
  43. }
  44. } else {
  45. sets.get(dataSet).add(dataKey);
  46. sets.put(dataSet, sets.get(dataSet));
  47. sizes.put(dataSet, sizes.get(dataSet) + dataSize);
  48. }
  49. }
  50.  
  51. input = scanner.nextLine();
  52. }
  53.  
  54. if (!sets.isEmpty()) {
  55. sizes.entrySet()
  56. .stream()
  57. .sorted((f, s) -> {
  58. long result = s.getValue() - f.getValue();
  59. return (int) result;
  60. })
  61. .limit(1)
  62. .forEach(e -> {
  63. System.out.printf("Data Set: %s, Total Size: %d%n",
  64. e.getKey(), e.getValue());
  65. for (String dataKey : sets.get(e.getKey())) {
  66. System.out.printf("$.%s%n", dataKey);
  67. }
  68. });
  69. }
  70.  
  71. }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment