Easy Java
5.22K subscribers
311 photos
51 videos
462 links
Лучшие обучающие материалы и другие полезности для Java-разработчиков.

Сотрудничество: @heywan_n1

Цены: @heywan_media

Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Download Telegram
📖 Глубокое погружение в Stream API Java: теория и практика

В статье вы узнаете, что это такое, и как этим пользоваться на реальных примерах и советах.

Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣3👍1🔥1
Вопрос с собеса

Где и для чего используется модификатор abstract?

Пример🔽
import java.util.Random;

public class RandomExample {
public static void main(String[] args) {
// 1. Math.random() - простой случайный double
double randomDouble = Math.random();
System.out.println("Math.random: " + randomDouble);

// 2. Random класс с seed для воспроизводимости
Random random = new Random(42);

// Разные типы данных
int randomInt = random.nextInt(100); // 0-99
double randomDbl = random.nextDouble();
boolean randomBool = random.nextBoolean();

System.out.println("Random int: " + randomInt);
System.out.println("Random double: " + randomDbl);
System.out.println("Random boolean: " + randomBool);

// 3. ThreadLocalRandom для многопоточности
java.util.concurrent.ThreadLocalRandom.current()
.ints(3, 1, 10)
.forEach(n -> System.out.println("Stream random: " + n));
}
}


Ответ🔽
Math.random() возвращает double в диапазоне [0.0, 1.0) и использует единственный статический Random объект под капотом, что может вызывать конкуренцию в многопоточности. Класс Random позволяет:

– Генерировать разные типы данных (int, long, float)
– Работать с несколькими seed'ами
– Создавать изолированные экземпляры для потоков


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔8🤡5💩2🤮1
👩‍💻 Викторина: что выведет код?

public class Quiz {
public static void main(String[] args) {
String s1 = "hello";
String s2 = new String("hello");
String s3 = s2.intern();

System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s2 == s3);
}
}

➡️ Easy Java | #Викторина
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔15
📖 Отладка приложений Spring Boot с помощью IntelliJ IDEA

Что такое Spring Boot? — Spring Boot упрощает создание мощных приложений, добавляя несколько зависимостей и выполняя минимальную настройку.

Всего несколько строк кода позволяют настроить конечные точки HTTP, подключиться к базе данных и обрабатывать события.

Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Что такое Stream.map() в Java и зачем он нужен?

Stream.map() — это промежуточная операция в Java Stream API, которая преобразует каждый элемент потока, применяя к нему заданную функцию. Результатом является новый поток с преобразованными элементами.

Преимущества:

– Упрощает преобразование данных без циклов
– Работает в цепочке операций Stream
– Поддерживает параллельное выполнение

⚡️ Пример кода:

import java.util.*;

public class StreamMapExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("apple", "banana", "cherry");

List<String> upperCaseFruits = fruits.stream()
.map(String::toUpperCase) // Преобразуем в верхний регистр
.toList();

System.out.println(upperCaseFruits); // [APPLE, BANANA, CHERRY]

// Преобразование строк в их длины
List<Integer> lengths = fruits.stream()
.map(String::length)
.toList();

System.out.println(lengths); // [5, 6, 6]
}
}


👀 Stream.map() особенно полезен для преобразования данных между форматами, извлечения конкретных полей из объектов и работы с числовыми преобразованиями.


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤔1
📖 Сайт-шпаргалка с различными лайфхаками по Java

Целых 14 страниц статей, теории и фишек. Везде есть подробное объяснение на русском языке вместе с примерами кода.

Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤡1
👩‍💻 Что такое Collectors.groupingBy() и зачем он нужен?

Collectors.groupingBy() — это коллектор из Java Stream API, который группирует элементы потока по заданному критерию, возвращая Map, где ключ — критерий группировки, а значение — список элементов.

Преимущества:

– Упрощает группировку данных без ручного создания Map
– Поддерживает сложные критерии группировки
– Может комбинироваться с другими коллекторами

⚡️ Пример кода:

import java.util.*;
import java.util.stream.*;

public class GroupingByExample {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "apricot", "berry", "avocado");

// Группировка по первой букве
Map<Character, List<String>> groupedByFirstLetter = words.stream()
.collect(Collectors.groupingBy(word -> word.charAt(0)));

System.out.println(groupedByFirstLetter);
// {a=[apple, apricot, avocado], b=[banana, berry]}

// Группировка по длине слова
Map<Integer, List<String>> groupedByLength = words.stream()
.collect(Collectors.groupingBy(String::length));

System.out.println(groupedByLength);
// {5=[apple, berry], 6=[banana], 7=[apricot, avocado]}
}
}

Особенности:

– Возвращает Map<K, List<T>>
– Может использовать метод-ссылки, лямбды или сложные предикаты
– Поддерживает каскадную группировку

👀 Особенно полезен в анализе и категоризации данных, построении отчетов и статистики, группировке объектов.


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1🤔1
👩‍💻 Викторина: что выведет код?

public class Main {
public static void main(String[] args) {
Test test = new Test();
test.process(10);
test.process(10.0);
}
}

class Test {
void process(int i) {
System.out.print("A");
}

void process(double d) {
System.out.print("B");
}

void process(Integer i) {
System.out.print("C");
}
}


➡️ Easy Java | #Викторина
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡92
Что выведет код?
Anonymous Quiz
17%
AABB
28%
AAB
22%
ABB
34%
ABC
🤔31🤡16😁1
📖 Насколько безграничны возможности Java?

Многие с этого канала как-либо работают с Java, но все ли осознают, насколько много у Java возможностей? В этой статье вы узнаете о всех масштабах и возможностях данного языка.

Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤣1
👩‍💻 Что такое String.join() и зачем он нужен?

String.join() — это статический метод класса String, который объединяет несколько строк в одну с использованием указанного разделителя.

Преимущества:

— Простой и читаемый способ конкатенации строк
— Избегает ручного управления разделителями
— Поддерживает коллекции и массивы

⚡️ Пример кода:

import java.util.*;

public class StringJoinExample {
public static void main(String[] args) {
// Объединение массива строк
String[] colors = {"красный", "зеленый", "синий"};
String result1 = String.join(" | ", colors);
System.out.println(result1); // красный | зеленый | синий

// Объединение коллекции
List<String> cities = Arrays.asList("Москва", "Санкт-Петербург", "Казань");
String result2 = String.join(", ", cities);
System.out.println(result2); // Москва, Санкт-Петербург, Казань

// Динамическое формирование пути
String path = String.join("/", "home", "user", "documents", "file.txt");
System.out.println(path); // home/user/documents/file.txt

// Объединение без разделителя
String words = String.join("", "Hello", "World");
System.out.println(words); // HelloWorld
}
}


Особенности:

— Не изменяет исходные строки
— Возвращает новую строку
— Принимает CharSequence (String, StringBuilder и т.д.)

👀 Особенно полезен в формировании CSV строк из коллекций, создании путей файловой системы и генерация SQL-запросов с IN условиями.


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🤡1
👩‍💻 Викторина: что выведет код?

class Parent {
static void print() {
System.out.print("Parent ");
}

void show() {
System.out.print("ParentShow ");
}
}

class Child extends Parent {
static void print() {
System.out.print("Child ");
}

@Override
void show() {
System.out.print("ChildShow ");
}
}

public class Main {
public static void main(String[] args) {
Parent obj = new Child();
obj.print();
obj.show();

Child child = new Child();
child.print();
}
}


➡️ Easy Java | #Викторина
Please open Telegram to view this post
VIEW IN TELEGRAM
Сразу к доказательству актуальности проблемы

➡️ Easy Java | #Мемы
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣10👍5😁1
👩‍💻 Что такое Files.walk() и зачем он нужен?

Files.walk() — это метод из Java NIO (пакет java.nio.file), который рекурсивно обходит файловое дерево, начиная с указанной директории, и возвращает Stream с путями ко всем найденным файлам и папкам.

Преимущества:

– Простой рекурсивный обход файловой системы
– Автоматическое управление ресурсами
– Поддержка параллельной обработки
– Фильтрация и преобразование прямо в потоке

⚡️ Пример кода:

import java.nio.file.*;
import java.io.IOException;
import java.util.stream.Stream;

public class FilesWalkExample {
public static void main(String[] args) {
Path startDir = Paths.get(".");

try (Stream<Path> paths = Files.walk(startDir, 3)) {
// Найти все .java файлы до глубины 3
paths.filter(Files::isRegularFile)
.filter(p -> p.toString().endsWith(".java"))
.forEach(p -> System.out.println("Java файл: " + p));

} catch (IOException e) {
System.err.println("Ошибка обхода: " + e.getMessage());
}

// Подсчет общего размера файлов
try (Stream<Path> allPaths = Files.walk(startDir)) {
long totalSize = allPaths.filter(Files::isRegularFile)
.mapToLong(p -> {
try {
return Files.size(p);
} catch (IOException e) {
return 0;
}
})
.sum();
System.out.println("Общий размер: " + totalSize + " байт");
} catch (IOException e) {
e.printStackTrace();
}
}
}


Особенности:

– Возвращает Stream<Path> для ленивой обработки
– Принимает параметр глубины поиска (максимальный уровень вложенности)
– Автоматически закрывает ресурсы при использовании try-with-resources
– Может выбрасывать IOException

👀 Особенно полезен при рекурсии файлов, вычислении статистики по директории, при сборе метаданных о файлах и т.п.


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
Самые хитрые и частые вопросы на собеседованиях

В статье рассказано про 10 самых «каверзных» вопросах на собеседованих, где достаточно часто допускают ошибки. Есть и те, что больше похожи на головоломки или касаются нюансов, которые прочувствовать без практики очень тяжело.

Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
NZT существует.

В фильме «Области тьмы»
герой выпивает NZT — и за день
становится трейдером,
мастером кунг-фу и полиглотом.

Дело не в таблетке.
А в состоянии.

Химия не нужна.
Когда ум чист,
внимание собрано,
и сомнений нет —
ты уже на NZT.

Ты замечаешь всё.
Действуешь без разрывов.
И мир отвечает тебе.

Как включить режим NZT?

Подписывайся на Мэверика.

• входи в состояние
всё «получается само».

• мгновенно принимай
лучшие решения.

• считывай сложные связи
там, где все видят хаос.

• управляй фокусом
и вероятностями событий.

Твоя таблетка NZT.
👇
Мэверик.
Ясность. Точность.
💩14
👩‍💻 Викторина: что выведет код?

public class Main {
static class Resource implements AutoCloseable {
private String name;

Resource(String name) { this.name = name; }

void use() throws Exception {
throw new Exception(name + " use exception");
}

@Override
public void close() throws Exception {
throw new Exception(name + " close exception");
}
}

public static void main(String[] args) {
try {
try (Resource r1 = new Resource("1");
Resource r2 = new Resource("2")) {
r1.use();
r2.use();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}


➡️ Easy Java | #Викторина
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1