Repository: CorporationX/god_bless
Pull request #19452: [BJS2-68353] Коллекционируем пользователей
Author: login: trytofixme
Created: 2025-04-18T07:54:12Z | Merged: 2025-04-21T17:57:32Z



Diff:
diff --git a/src/main/java/school/faang/bjs2_68353/Main.java b/src/main/java/school/faang/bjs2_68353/Main.java
new file mode 100644
index 00000000000..3e94b09e8f9
--- /dev/null
+++ b/src/main/java/school/faang/bjs2_68353/Main.java
@@ -0,0 +1,40 @@
+package school.faang.bjs2_68353;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+@Slf4j
+public class Main {
+    public static void main(String [] args) {
+        List<User> users = Arrays.asList(
+                new User(
+                        UUID.randomUUID(),
+                        "Михаил",
+                        28,
+                        new HashSet<>(Set.of("Reading", "Review"))
+                ),
+                new User(
+                        UUID.randomUUID(),
+                        "Андрей",
+                        33,
+                        new HashSet<>(Set.of("Basketball", "Bulling", "Swimming"))
+                ),
+                new User(
+                        UUID.randomUUID(),
+                        "Виктория",
+                        22,
+                        new HashSet<>(Set.of("Review", "Basketball"))
+                )
+        );
+        Set<String> activities = Set.of("Reading", "Review", "Basketball", "Bulling", "Swimming", "NotListedHobby");
+
+        Map<User, String> hobbyLovers = User.findHobbyLovers(users, activities);
+        hobbyLovers.forEach((user, hobby) -> log.info("Пользователь {} предпочитает {}", user.name(), hobby));
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/school/faang/bjs2_68353/User.java b/src/main/java/school/faang/bjs2_68353/User.java
new file mode 100644
index 00000000000..446e60d108c
--- /dev/null
+++ b/src/main/java/school/faang/bjs2_68353/User.java
@@ -0,0 +1,29 @@
+package school.faang.bjs2_68353;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+public record User(UUID id, String name, int age, Set<String> activities) {
+    public static Map<User, String> findHobbyLovers(List<User> users, Set<String> requestedActivities) {
+        if (users == null || users.isEmpty() || requestedActivities == null || requestedActivities.isEmpty()) {
+            return Collections.emptyMap();
+        }
+
+        return users.stream()
+                .flatMap(user ->
+                        Optional.ofNullable(user.activities())
+                                .orElse(Collections.emptySet())
+                                .stream()
+                                .filter(requestedActivities::contains)
+                                .findFirst()
+                                .stream()
+                                .map(activity -> Map.entry(user, activity))
+                )
+                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+    }
+}
\ No newline at end of file


Reviews:
user: login: TheWandererr
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-18T08:15:42Z

Review comments:
diff_hunk: @@ -0,0 +1,37 @@
+package school.faang.bjs2_68353;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
+public class Main {
+    public static void main(String [] args) {
+        var users = Arrays.asList(
+                new User(
+                        UUID.randomUUID(),
+                        "Михаил",
+                        28,
+                        new HashSet<>(Set.of("Reading", "Review"))
+                ),
+                new User(
+                        UUID.randomUUID(),
+                        "Андрей",
+                        33,
+                        new HashSet<>(Set.of("Basketball", "Bulling", "Swimming"))
+                ),
+                new User(
+                        UUID.randomUUID(),
+                        "Виктория",
+                        22,
+                        new HashSet<>(Set.of("Review", "Basketball"))
+                )
+        );
+        var activities = new HashSet<>(
path: src/main/java/school/faang/bjs2_68353/Main.java
user: login: TheWandererr
body: оборачиватьв  хэш сет для активностей юзеров - хороший вариант, чтобы была возможность модифицировать коллекцию, но тут не имеет смысла, задаем константный набор ведь
created_at: 2025-04-18T08:13:38Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,31 @@
+package school.faang.bjs2_68353;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+@Getter
+@AllArgsConstructor
+public class User {
+    private UUID id;
+    private String name;
+    private int age;
+    private Set<String> activities;
+
+    public static Map<User, String> findHobbyLovers(List<User> users, Set<String> requestedActivities) {
+        return users.stream()
+                .flatMap(user ->
+                        user.getActivities().stream()
path: src/main/java/school/faang/bjs2_68353/User.java
user: login: TheWandererr
body: для коллекций стоит либо в конструкторе проверять на null коллекцию, либо использовать lazy getter для избежания потенциальных NPE
created_at: 2025-04-18T08:14:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,31 @@
+package school.faang.bjs2_68353;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+@Getter
+@AllArgsConstructor
+public class User {
+    private UUID id;
+    private String name;
+    private int age;
+    private Set<String> activities;
+
+    public static Map<User, String> findHobbyLovers(List<User> users, Set<String> requestedActivities) {
path: src/main/java/school/faang/bjs2_68353/User.java
user: login: TheWandererr
body: а если входные коллекции пустые или null? corner cases всегда стоит обрабатывать
created_at: 2025-04-18T08:15:35Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-18T07:54:23Z
body: ⚠️ **ОШЫБКА**: Ты создал PR в master ветку. PR-ы можно создавать только в СВОЮ ветку вида {имя_пользователя_discord}. Пожалуйста, нажми кнопку Edit вверху и измени ветку, в которую направляешь PR. После этого красная ошибка ниже должна пропасть, но этот комментарий останется - так и должно быть.
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-18T07:54:58Z
body: ⚠️ **ОШЫБКА**: Сборка завалилась: либо ошибки компиляции, либо не прошли тесты, либо возникли ошибки в стиле кода. Пожалуйста, проверь логи и внеси соответствующие изменения в ПР. После этого красная ошибка ниже должна пропасть, но этот комментарий останется - так и должно быть.
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-18T07:55:18Z
body: ⚠️ **ОШЫБКА**: Сборка завалилась: либо ошибки компиляции, либо не прошли тесты, либо возникли ошибки в стиле кода. Пожалуйста, проверь логи и внеси соответствующие изменения в ПР. После этого красная ошибка ниже должна пропасть, но этот комментарий останется - так и должно быть.
author_association: NONE