Вопросы с собеседования 👩💻
Что делает метод split() в классе String?
Что делает метод split() в классе String?
Anonymous Quiz
13%
Объединяет строки
77%
Разделяет строку на массив подстрок
6%
Удаляет пробелы
4%
Заменяет символы
👌2
Comparable и Comparator. Практические примеры и рекомендации
Пример 1: Сортировка с учетом нескольких полей
Допустим, у нас есть класс Employee, который нужно сортировать сначала по отделу, а затем по зарплате:
Сортировка с использованием Comparator:
Пример 2: Обратная сортировка
Для сортировки в обратном порядке можно использовать reversed():
Пример 3: Использование в TreeSet
TreeSet автоматически поддерживает порядок элементов, используя Comparable или Comparator:
Рекомендации
Выбирайте Comparable для естественного порядка
Если класс имеет очевидный порядок (например, числа, строки), реализуйте Comparable. Это упрощает использование класса в стандартных коллекциях.
Используйте Comparator для гибкости
Для альтернативных порядков или классов, которые нельзя модифицировать, создавайте отдельные Comparator.
Пользуйтесь Java 8+
Методы Comparator.comparing(), thenComparing() и лямбда-выражения значительно упрощают код.
Тестируйте сортировку
Убедитесь, что реализация compareTo и compare корректно обрабатывает краевые случаи (null, равные объекты, экстремальные значения).
Избегайте модификации отсортированных коллекций
Если объект в TreeSet или TreeMap изменяется так, что нарушается порядок, это может привести к некорректной работе коллекции.
#Java #Training #Medium #Comparable #Comparator
Пример 1: Сортировка с учетом нескольких полей
Допустим, у нас есть класс Employee, который нужно сортировать сначала по отделу, а затем по зарплате:
public class Employee {
private String department;
private double salary;
public Employee(String department, double salary) {
this.department = department;
this.salary = salary;
}
public String getDepartment() { return department; }
public double getSalary() { return salary; }
@Override
public String toString() {
return department + ": " + salary;
}
}
Сортировка с использованием Comparator:
List employees = new ArrayList<>();
employees.add(new Employee("HR", 50000));
employees.add(new Employee("IT", 60000));
employees.add(new Employee("HR", 45000));
Comparator comparator = Comparator.comparing(Employee::getDepartment).thenComparingDouble(Employee::getSalary);
Collections.sort(employees, comparator);
System.out.println(employees); // Вывод: [HR: 45000.0, HR: 50000.0, IT: 60000.0]
Пример 2: Обратная сортировка
Для сортировки в обратном порядке можно использовать reversed():
Comparator reverseComparator = Comparator.comparingDouble(Employee::getSalary).reversed();
Collections.sort(employees, reverseComparator);
System.out.println(employees); // Вывод: [IT: 60000.0, HR: 50000.0, HR: 45000.0]
Пример 3: Использование в TreeSet
TreeSet автоматически поддерживает порядок элементов, используя Comparable или Comparator:
TreeSet employeeSet = new TreeSet<>(Comparator.comparing(Employee::getDepartment).thenComparingDouble(Employee::getSalary));
employeeSet.add(new Employee("HR", 50000));
employeeSet.add(new Employee("IT", 60000));
employeeSet.add(new Employee("HR", 45000));
System.out.println(employeeSet); // Вывод: [HR: 45000.0, HR: 50000.0, IT: 60000.0]
Рекомендации
Выбирайте Comparable для естественного порядка
Если класс имеет очевидный порядок (например, числа, строки), реализуйте Comparable. Это упрощает использование класса в стандартных коллекциях.
Используйте Comparator для гибкости
Для альтернативных порядков или классов, которые нельзя модифицировать, создавайте отдельные Comparator.
Пользуйтесь Java 8+
Методы Comparator.comparing(), thenComparing() и лямбда-выражения значительно упрощают код.
Тестируйте сортировку
Убедитесь, что реализация compareTo и compare корректно обрабатывает краевые случаи (null, равные объекты, экстремальные значения).
Избегайте модификации отсортированных коллекций
Если объект в TreeSet или TreeMap изменяется так, что нарушается порядок, это может привести к некорректной работе коллекции.
#Java #Training #Medium #Comparable #Comparator
👌2👍1
А вы знали, что первый браузер назывался WorldWideWeb?
В 1990 году Тим Бернерс-Ли создал первый веб-браузер под названием WorldWideWeb (позже переименованный в Nexus). Он позволял просматривать и редактировать веб-страницы, но работал только на компьютерах NeXT. С 30 апреля 1993 года интернет-браузер стал общедоступным, а его код — открытым.
proof
#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
"Программы должны быть написаны для людей, которые их читают."
Хэл Абелсон, соавтор SICP, сказал это в 1985 году в книге "Structure and Interpretation of Computer Programs".
Почитать короткую биографию
#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
Wikipedia
Абельсон, Гарольд
Гарольд (Хэл) Абельсон (англ. Harold «Hal» Abelson; род. 26 апреля 1947) — профессор электротехники и компьютерных наук в Массачусетском технологическом институте (MIT Electrical Engineering and Computer Science Department), член Института инженеров электротехники…
👍2
Collectors в Java
Collectors в Java — это утилитный класс из пакета java.util.stream, введенный в Java 8 вместе с Stream API. Он предоставляет готовые реализации для выполнения операций сведения (reduction) над потоками данных. Основная задача Collectors — собирать элементы потока в коллекции, выполнять группировку, агрегацию или другие преобразования. Collectors используется в методе Stream.collect(), который является терминальной операцией, завершающей обработку потока.
Класс Collectors содержит статические методы, возвращающие объекты типа Collector<T, A, R>, где:
T — тип элементов в потоке.
A — тип промежуточного аккумулятора, используемого для накопления данных.
R — тип результата, который возвращается после обработки.
Collectors упрощает работу с потоками, предоставляя готовые решения для типичных задач, таких как сбор элементов в список, множество, словарь, группировка по ключу или подсчет статистики. Без Collectors пришлось бы вручную реализовывать сложную логику с использованием собственных аккумуляторов.
Collector состоит из четырех ключевых компонентов:
Supplier: создает начальный аккумулятор (например, новый ArrayList).
Accumulator: добавляет элемент потока в аккумулятор.
Combiner: объединяет два аккумулятора (используется в параллельных потоках).
Finisher: преобразует аккумулятор в конечный результат (например, возвращает коллекцию).
Пример простого использования:
Collectors часто используется для:
Сбора элементов в коллекции (List, Set, Map).
Группировки данных (groupingBy).
Объединения строк (joining).
Вычисления статистик (summingInt, averagingDouble).
#Java #Training #Medium #Collectors
Collectors в Java — это утилитный класс из пакета java.util.stream, введенный в Java 8 вместе с Stream API. Он предоставляет готовые реализации для выполнения операций сведения (reduction) над потоками данных. Основная задача Collectors — собирать элементы потока в коллекции, выполнять группировку, агрегацию или другие преобразования. Collectors используется в методе Stream.collect(), который является терминальной операцией, завершающей обработку потока.
Класс Collectors содержит статические методы, возвращающие объекты типа Collector<T, A, R>, где:
T — тип элементов в потоке.
A — тип промежуточного аккумулятора, используемого для накопления данных.
R — тип результата, который возвращается после обработки.
Collectors упрощает работу с потоками, предоставляя готовые решения для типичных задач, таких как сбор элементов в список, множество, словарь, группировка по ключу или подсчет статистики. Без Collectors пришлось бы вручную реализовывать сложную логику с использованием собственных аккумуляторов.
Collector состоит из четырех ключевых компонентов:
Supplier: создает начальный аккумулятор (например, новый ArrayList).
Accumulator: добавляет элемент потока в аккумулятор.
Combiner: объединяет два аккумулятора (используется в параллельных потоках).
Finisher: преобразует аккумулятор в конечный результат (например, возвращает коллекцию).
Пример простого использования:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class CollectorsExample {
public static void main(String[] args) {
Stream<String> stream = Stream.of("apple", "banana", "orange");
List<String> list = stream.collect(Collectors.toList());
System.out.println(list); // [apple, banana, orange]
}
}
Collectors часто используется для:
Сбора элементов в коллекции (List, Set, Map).
Группировки данных (groupingBy).
Объединения строк (joining).
Вычисления статистик (summingInt, averagingDouble).
#Java #Training #Medium #Collectors
👍3
Что выведет код?
#Tasks
import java.util.HashSet;
public class Task250425 {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = "hello";
String s4 = s1.intern();
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
set.add(null);
set.add(null);
System.out.println(set.size());
}
}
#Tasks
👍1
Вопросы с собеседования 👩💻
Какой класс используется для работы с датами в Java 8 и новее?
Какой класс используется для работы с датами в Java 8 и новее?
Anonymous Quiz
14%
Date
67%
LocalDate
12%
Calendar
6%
Time
👍1
Collectors в Java
Collectors.toList
Collectors.toList() собирает элементы потока в List. Реализация по умолчанию возвращает ArrayList, но конкретная реализация не гарантируется и может измениться. Это один из самых простых и часто используемых коллекторов.
Пример:
Внутренне toList использует:
Supplier: new ArrayList<>()
Accumulator: list.add(element)
Combiner: list1.addAll(list2)
Finisher: возвращает сам аккумулятор (identity функция).
Особенности:
Сохраняет порядок элементов (если поток упорядочен).
Допускает дубликаты.
Не поддерживает настройку типа List (для этого есть toCollection).
Collectors.toSet
Collectors.toSet() собирает элементы потока в Set, по умолчанию возвращая HashSet. Как и в случае с toList, конкретная реализация не гарантируется.
Пример:
Внутренне toSet использует:
Supplier: new HashSet<>()
Accumulator: set.add(element)
Combiner: set1.addAll(set2)
Finisher: возвращает аккумулятор.
Особенности:
Удаляет дубликаты (Set не допускает повторяющихся элементов).
Не гарантирует порядок элементов (HashSet не сохраняет порядок).
Для упорядоченного множества можно использовать toCollection(TreeSet::new).
#Java #Training #Medium #Collectors #CollectorsToList #CollectorsToSet
Collectors.toList
Collectors.toList() собирает элементы потока в List. Реализация по умолчанию возвращает ArrayList, но конкретная реализация не гарантируется и может измениться. Это один из самых простых и часто используемых коллекторов.
Пример:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ToListExample {
public static void main(String[] args) {
Stream<String> stream = Stream.of("apple", "banana", "orange");
List<String> list = stream.collect(Collectors.toList());
System.out.println(list); // [apple, banana, orange]
}
}
Внутренне toList использует:
Supplier: new ArrayList<>()
Accumulator: list.add(element)
Combiner: list1.addAll(list2)
Finisher: возвращает сам аккумулятор (identity функция).
Особенности:
Сохраняет порядок элементов (если поток упорядочен).
Допускает дубликаты.
Не поддерживает настройку типа List (для этого есть toCollection).
Collectors.toSet
Collectors.toSet() собирает элементы потока в Set, по умолчанию возвращая HashSet. Как и в случае с toList, конкретная реализация не гарантируется.
Пример:
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ToSetExample {
public static void main(String[] args) {
Stream<String> stream = Stream.of("apple", "banana", "apple");
Set<String> set = stream.collect(Collectors.toSet());
System.out.println(set); // [apple, banana]
}
}
Внутренне toSet использует:
Supplier: new HashSet<>()
Accumulator: set.add(element)
Combiner: set1.addAll(set2)
Finisher: возвращает аккумулятор.
Особенности:
Удаляет дубликаты (Set не допускает повторяющихся элементов).
Не гарантирует порядок элементов (HashSet не сохраняет порядок).
Для упорядоченного множества можно использовать toCollection(TreeSet::new).
#Java #Training #Medium #Collectors #CollectorsToList #CollectorsToSet
👍2
Всем доброго, субботнего утра! ☀️
Надеюсь, что у всех все хорошо и очередная суббота позволит отдохнуть и восстановить силы перед напряженными 3-х дневными рабочими неделями🤣
Сегодня как всегда мы посмотрим мемчики, а вот завтра вечером жду всех на лайф кодинге!
@Shikin_Anatoliy допишет свой футбольный сервис! Так что приходите, двери открыты для усех❤️
А в остальном, всем и каждому, просто хороших выходных!💃
Надеюсь, что у всех все хорошо и очередная суббота позволит отдохнуть и восстановить силы перед напряженными 3-х дневными рабочими неделями
Сегодня как всегда мы посмотрим мемчики, а вот завтра вечером жду всех на лайф кодинге!
@Shikin_Anatoliy допишет свой футбольный сервис! Так что приходите, двери открыты для усех
А в остальном, всем и каждому, просто хороших выходных!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2 1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3😢1