Repository: CorporationX/god_bless
Pull request #18833: BJS2-68100 
Author: login: SalonSforza
Created: 2025-04-06T17:00:09Z | Merged: 2025-04-06T20:57:33Z

Блок 1.2 Java Core и Основы SQL


Задача: 
Группировка пользователей по возрасту




Diff:
diff --git a/build.gradle b/build.gradle
index 7bf0a0403c9..1321e0ae03c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -12,7 +12,6 @@ repositories {
 }
 
 dependencies {
-
     implementation("com.fasterxml.jackson.core:jackson-databind:2.14.2")
     implementation("org.slf4j:slf4j-api:2.0.5")
     implementation("ch.qos.logback:logback-classic:1.4.6")
@@ -20,13 +19,13 @@ dependencies {
     annotationProcessor("org.projectlombok:lombok:1.18.26")
     testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
     testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
-
     testImplementation("org.assertj:assertj-core:3.24.2")
     testImplementation("org.junit.jupiter:junit-jupiter-engine:5.9.2")
 }
 
 test {
     useJUnitPlatform()
+    jvmArgs = ['-Dfile.encoding=UTF-8']
 }
 
 checkstyle {
@@ -40,13 +39,12 @@ tasks.checkstyleMain {
     source = fileTree("${project.rootDir}/src/main/java")
     include("**/*.java")
     exclude("**/resources/**")
-
     classpath = files()
 }
 
 tasks.checkstyleTest {
     source = fileTree("${project.rootDir}/src/test")
     include("**/*.java")
-
     classpath = files()
-}
\ No newline at end of file
+}
+
diff --git a/src/main/java/school/faang/BJS2_68100/Main.java b/src/main/java/school/faang/BJS2_68100/Main.java
new file mode 100644
index 00000000000..35a1177c468
--- /dev/null
+++ b/src/main/java/school/faang/BJS2_68100/Main.java
@@ -0,0 +1,21 @@
+package school.faang.BJS2_68100;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+    public static void main(String[] args) {
+        List<User> users = List.of(
+                new User("Nick", 22, "T", "Tralala str, 23"),
+                new User("Sam", 23, "VTB", "Tralala str, 23"),
+                new User("Frodo", 22, "SBER", "Tralala str, 24"),
+                new User("Fulgrim", 24, "T", "Tralala str, 24"),
+                new User("Angron", 24, "T", "Tralala str, 25"),
+                new User("Perturabo", 25, "SBER", "Tralala str, 25"),
+                new User("Fedya", 25, "VTB", "Tralala str, 26"),
+                new User("Felix", 22, "Alpha", "Tralala str, 26")
+        );
+
+        System.out.println(User.groupUsers(users));
+    }
+}
diff --git a/src/main/java/school/faang/BJS2_68100/User.java b/src/main/java/school/faang/BJS2_68100/User.java
new file mode 100644
index 00000000000..430add149c5
--- /dev/null
+++ b/src/main/java/school/faang/BJS2_68100/User.java
@@ -0,0 +1,29 @@
+package school.faang.BJS2_68100;
+
+import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Getter
+@Setter
+@EqualsAndHashCode
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+public class User {
+
+    private String name;
+    private int age;
+    private String workplace;
+    private String address;
+
+    public static Map<Integer, List<User>> groupUsers(List<User> users) {
+        return users.stream().collect(Collectors.groupingBy(User::getAge));
+    }
+}
diff --git a/src/main/java/school/faang/Main.java b/src/main/java/school/faang/Main.java
deleted file mode 100644
index b7226d6c1ca..00000000000
--- a/src/main/java/school/faang/Main.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package school.faang;
-
-public class Main {
-}


Reviews:
user: login: MarselYsup
state: CHANGES_REQUESTED
author_association: NONE
submitted_at: 2025-04-06T18:00:08Z
user: login: MarselYsup
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-06T18:07:20Z
user: login: MarselYsup
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-06T18:08:27Z
user: login: MarselYsup
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-06T18:48:21Z
user: login: MarselYsup
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-06T19:59:37Z

Review comments:
diff_hunk: @@ -0,0 +1,21 @@
+package school.faang.BJS2_68100;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+    public static void main(String[] args) {
+        List<User> users = new ArrayList<>();
+        users.add(new User("Nick", 22, "T", "Tralala str, 23"));
path: src/main/java/school/faang/BJS2_68100/Main.java
user: login: MarselYsup
body:  Это хороший способ создать список, когда ты его наполняешь постепенно. Но если значения уже известны, лучше использовать ```List.of```. Это быстрее и выглядит аккуратнее!
Посмотри про него, там есть небольшие ограничения, но для этой задачи хорошо подойдет
created_at: 2025-04-06T17:25:35Z
author_association: NONE
diff_hunk: @@ -0,0 +1,38 @@
+package school.faang.BJS2_68100;
+
+import lombok.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Getter
+@Setter
+@EqualsAndHashCode
+@NoArgsConstructor
+@ToString
+public class User {
+
+    private String name;
+
+    private int age;
+
+    private String workplace;
+
+    private String address;
+
+
+    public User(String name, int age, String workplace, String address) {
+        this.name = name;
+        this.age = age;
+        this.workplace = workplace;
+        this.address = address;
+    }
+
+    public static Map<Integer, List<User>> groupUsers(List<User> users) {
+
+        return users.stream().collect(Collectors.groupingBy(User::getAge));
+
path: src/main/java/school/faang/BJS2_68100/User.java
user: login: MarselYsup
body: Не оставляй пустых строчек в начале метода и в его конце, лучше всего их использовать, чтобы разделять логику внутри метода.
created_at: 2025-04-06T17:29:29Z
author_association: NONE
diff_hunk: @@ -0,0 +1,21 @@
+package school.faang.BJS2_68100;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+    public static void main(String[] args) {
+        List<User> users = new ArrayList<>();
+        users.add(new User("Nick", 22, "T", "Tralala str, 23"));
+        users.add(new User("Sam", 23, "VTB", "Tralala str, 23"));
+        users.add(new User("Frodo", 22, "SBER", "Tralala str, 24"));
+        users.add(new User("Fulgrim", 24, "T", "Tralala str, 24"));
+        users.add(new User("Angron", 24, "T", "Tralala str, 25"));
+        users.add(new User("Perturabo", 25, "SBER", "Tralala str, 25"));
+        users.add(new User("Fedya", 25, "VTB", "Tralala str, 26"));
+        users.add(new User("Felix", 22, "Alpha", "Tralala str, 26"));
+
+        System.out.println(User.groupUsers(users));
+
path: src/main/java/school/faang/BJS2_68100/Main.java
user: login: MarselYsup
body: Аналогично тут не оставляй пустых строчек в конце метода
created_at: 2025-04-06T17:33:38Z
author_association: NONE
diff_hunk: @@ -0,0 +1,38 @@
+package school.faang.BJS2_68100;
+
+import lombok.*;
path: src/main/java/school/faang/BJS2_68100/User.java
user: login: MarselYsup
body: Избегай схлопывания импортов в *. Это делает код менее читаемым. Убедись, что видны все импортированные классы. Можно настроить в IntelliJ IDEA: Settings -> Editor -> Code Style -> Java -> и увеличить лимит для wildcard imports.
![image](https://github.com/user-attachments/assets/9fd3db7f-1e9e-48e2-a306-5b72eb585aa5)

created_at: 2025-04-06T17:39:53Z
author_association: NONE
diff_hunk: @@ -0,0 +1,38 @@
+package school.faang.BJS2_68100;
+
+import lombok.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Getter
+@Setter
+@EqualsAndHashCode
+@NoArgsConstructor
+@ToString
+public class User {
+
+    private String name;
+
+    private int age;
+
+    private String workplace;
+
+    private String address;
+
+
path: src/main/java/school/faang/BJS2_68100/User.java
user: login: MarselYsup
body: лишняя пустая строка
created_at: 2025-04-06T17:41:32Z
author_association: NONE
diff_hunk: @@ -0,0 +1,38 @@
+package school.faang.BJS2_68100;
+
+import lombok.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Getter
+@Setter
+@EqualsAndHashCode
+@NoArgsConstructor
+@ToString
+public class User {
+
+    private String name;
+
+    private int age;
+
+    private String workplace;
+
+    private String address;
+
+
+    public User(String name, int age, String workplace, String address) {
+        this.name = name;
+        this.age = age;
+        this.workplace = workplace;
+        this.address = address;
+    }
+
+    public static Map<Integer, List<User>> groupUsers(List<User> users) {
+
+        return users.stream().collect(Collectors.groupingBy(User::getAge));
path: src/main/java/school/faang/BJS2_68100/User.java
user: login: MarselYsup
body: Отличное решение через stream! 
хотя изучать мы их будем в следующих главах
created_at: 2025-04-06T17:50:18Z
author_association: NONE
diff_hunk: @@ -0,0 +1,38 @@
+package school.faang.BJS2_68100;
+
+import lombok.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Getter
+@Setter
+@EqualsAndHashCode
+@NoArgsConstructor
+@ToString
+public class User {
+
+    private String name;
+
+    private int age;
+
+    private String workplace;
+
+    private String address;
+
+
+    public User(String name, int age, String workplace, String address) {
+        this.name = name;
+        this.age = age;
+        this.workplace = workplace;
+        this.address = address;
+    }
+
+    public static Map<Integer, List<User>> groupUsers(List<User> users) {
+
+        return users.stream().collect(Collectors.groupingBy(User::getAge));
+
+    }
+
path: src/main/java/school/faang/BJS2_68100/User.java
user: login: MarselYsup
body: между последним методом и концом класса пустую строчку оставлять тоже не нужно
created_at: 2025-04-06T17:51:48Z
author_association: NONE
diff_hunk: @@ -0,0 +1,38 @@
+package school.faang.BJS2_68100;
+
+import lombok.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Getter
+@Setter
+@EqualsAndHashCode
+@NoArgsConstructor
+@ToString
+public class User {
+
+    private String name;
+
path: src/main/java/school/faang/BJS2_68100/User.java
user: login: MarselYsup
body: между полями класса пустую строчку не нужно ставить, обычно они пишутся все подряд слитно, а уже далее разделяя пустой строкой идут методы


created_at: 2025-04-06T17:54:59Z
author_association: NONE
diff_hunk: @@ -0,0 +1,38 @@
+package school.faang.BJS2_68100;
+
+import lombok.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Getter
+@Setter
+@EqualsAndHashCode
+@NoArgsConstructor
+@ToString
+public class User {
+
+    private String name;
+
+    private int age;
+
+    private String workplace;
+
+    private String address;
+
+
+    public User(String name, int age, String workplace, String address) {
path: src/main/java/school/faang/BJS2_68100/User.java
user: login: MarselYsup
body: При помощи Lombok можно тоже избавиться от конструктора, который принимает все поля в класса в качестве аргументов - ```@AllArgsConstructor```
created_at: 2025-04-06T17:57:15Z
author_association: NONE
diff_hunk: @@ -0,0 +1,38 @@
+package school.faang.BJS2_68100;
+
+import lombok.*;
+
path: src/main/java/school/faang/BJS2_68100/User.java
user: login: MarselYsup
body: между импортами пустые строчки не нужны, они идут все подряд
created_at: 2025-04-06T17:58:16Z
author_association: NONE
diff_hunk: @@ -27,15 +27,21 @@ dependencies {
 
 test {
     useJUnitPlatform()
+    jvmArgs = ['-Dfile.encoding=UTF-8']
 }
 
 checkstyle {
+
path: build.gradle
user: login: MarselYsup
body: пустая строчка не нужна
created_at: 2025-04-06T18:07:20Z
author_association: NONE
diff_hunk: @@ -49,4 +55,5 @@ tasks.checkstyleTest {
     include("**/*.java")
 
     classpath = files()
-}
\ No newline at end of file
+}
+
path: build.gradle
user: login: MarselYsup
body: в конце тоже пустая строчка не нужна
created_at: 2025-04-06T18:08:27Z
author_association: NONE
diff_hunk: @@ -36,17 +35,20 @@ checkstyle {
     ignoreFailures = false
 }
 
+tasks.withType(JavaCompile).configureEach {
+    options.encoding = 'UTF-8'
path: build.gradle
user: login: MarselYsup
body: точно ли это тебе необходимо?  
created_at: 2025-04-06T18:48:21Z
author_association: NONE
diff_hunk: @@ -0,0 +1,19 @@
+package school.faang.BJS2_68100;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+    public static void main(String[] args) {
+        List<User> users = new ArrayList<>();
+        users.add(new User("Nick", 22, "T", "Tralala str, 23"));
+        users.add(new User("Sam", 23, "VTB", "Tralala str, 23"));
+        users.add(new User("Frodo", 22, "SBER", "Tralala str, 24"));
+        users.add(new User("Fulgrim", 24, "T", "Tralala str, 24"));
+        users.add(new User("Angron", 24, "T", "Tralala str, 25"));
+        users.add(new User("Perturabo", 25, "SBER", "Tralala str, 25"));
+        users.add(new User("Fedya", 25, "VTB", "Tralala str, 26"));
+        users.add(new User("Felix", 22, "Alpha", "Tralala str, 26"));
path: src/main/java/school/faang/BJS2_68100/Main.java
user: login: MarselYsup
body: вот тут лучше как раз строчку добавить, чтобы разделить логику наполнения листа от вывода пользователей 
created_at: 2025-04-06T19:51:52Z
author_association: NONE
diff_hunk: @@ -0,0 +1,21 @@
+package school.faang.BJS2_68100;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+    public static void main(String[] args) {
+        List<User> users = new ArrayList<>();
+        users.add(new User("Nick", 22, "T", "Tralala str, 23"));
path: src/main/java/school/faang/BJS2_68100/Main.java
user: login: MarselYsup
body: Попробуй тут реализовать наполнение пользователей через 
```java 
List<User> users = List.of(...)
```
created_at: 2025-04-06T19:59:13Z
author_association: NONE

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-06T18:25:51Z
body: ⚠️ **ОШЫБКА**: Сборка завалилась: либо ошибки компиляции, либо не прошли тесты, либо возникли ошибки в стиле кода. Пожалуйста, проверь логи и внеси соответствующие изменения в ПР. После этого красная ошибка ниже должна пропасть, но этот комментарий останется - так и должно быть.
author_association: NONE
user: login: SalonSforza
created_at: 2025-04-06T18:36:35Z
body: Поправил всё в соответствии с Вашими комментариями. 

По поводу пробелов между полями - уже сформировавшаяся привычка оставлять место под аннтотацию @ Column :)
author_association: NONE
user: login: MarselYsup
created_at: 2025-04-06T20:08:19Z
body: Оставил еще пару комментариев, поправь их тоже - 
1) попробуй реализовать наполнение пользователей через ```List.of```
2) добавь строчку для разделения между наполнением пользователей и выводом их на экран (лучше всего разделять логику пустыми строчками внутри метода )
3) доп настройка в build.gradle по задаче не нужна
  
Насчет место под аннтотацию @ Column понимаю да, бывает)) Главное старайся проверять свой код стайл и проверять на наличие ненужных пустых строк, строк между импортами и тд 
да и можно обращаться на ты, мы все тут одна команда 😊

author_association: NONE
user: login: SalonSforza
created_at: 2025-04-06T20:53:03Z
body: Добавил List.of(), добавил пустую строчку для разделения логики. 

Настройка gradle - тоже убрал. Пытался заставить консоль выводить кириллицу
author_association: NONE