Advertisement
desislava_topuzakova

09. Force Book

Nov 4th, 2022
426
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1. package maps;
  2.  
  3. import java.util.*;
  4.  
  5. public class Forcebook {
  6. public static void main(String[] args) {
  7. Scanner scanner = new Scanner(System.in);
  8. String command = scanner.nextLine(); //валидна команда или Lumpawaroo
  9.  
  10. //запис: група (side) -> списък с user-и
  11. Map<String, List<String>> map = new LinkedHashMap<>();
  12.  
  13. while (!command.equals("Lumpawaroo")) {
  14. //валидна команда
  15. if (command.contains(" | ")) {
  16. //command = "{force_side} | {force_user}".split(" | ") -> ["{force_side}", "{force_user}"]
  17. String group = command.split("\\s+\\|\\s+")[0];
  18. String user = command.split("\\s+\\|\\s+")[1];
  19. //1. дали нямаме такава група
  20. if (!map.containsKey(group)) {
  21. //група -> празен списък
  22. map.put(group, new ArrayList<>());
  23. }
  24. //2. имаме такава група -> добавяме към групата user, ако го няма в НИКОЯ ГРУПА
  25. boolean isExistUser = false; //user го има в даден група
  26. for (List<String> listUsers : map.values()) {
  27. if (listUsers.contains(user)) {
  28. //user го има в някоя група
  29. isExistUser = true;
  30. break;
  31. }
  32. }
  33.  
  34. if (!isExistUser) {
  35. //user го няма в никоя група
  36. map.get(group).add(user);
  37. }
  38. } else if (command.contains(" -> ")) {
  39. //command = "{force_user} -> {force_side}".split(" -> ") -> ["{force_user}", "{force_side}"]
  40. String user = command.split("\\s+->\\s+")[0];
  41. String group = command.split("\\s+->\\s+")[1]; //група, в която отива
  42.  
  43. //1. ако дадения user го има в дадена група -> премахваме го от текущата група
  44. //запис: група (key) -> списък с users (value)
  45. map.entrySet().forEach(entry -> entry.getValue().remove(user));
  46.  
  47. //2. проверяваме дали имаме такава група, в която отива
  48. if (map.containsKey(group)) {
  49. map.get(group).add(user);
  50. } else {
  51. //нямама такава група, в която иска да отиде -> създаваме
  52. map.put(group, new ArrayList<>());
  53. map.get(group).add(user);
  54. }
  55.  
  56. System.out.printf("%s joins the %s side!%n", user, group);
  57. }
  58. command = scanner.nextLine();
  59. }
  60.  
  61.  
  62. //запис: група -> списък с user-и
  63. //1. филтрирам записите -> бр. хората > 0
  64. map.entrySet() //всички записи
  65. .stream().filter(entry -> entry.getValue().size() > 0) //оставяме само записите, които отговарят на условието да имат хора в групата
  66. //списък със записи, които отговарят на условието
  67. .forEach(entry -> {
  68. //entry: groupName(key) -> list of users (value)
  69. //"Side: {forceSide}, Members: {forceUsers.Count}
  70. System.out.printf("Side: %s, Members: %d%n", entry.getKey(), entry.getValue().size());
  71. entry.getValue().forEach(user -> System.out.println("! " + user));
  72. }
  73. );
  74. }
  75. }
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement