Вопросы с собеседования 👩💻
Какой класс используется для работы с датами в Java 8 и новее?
Какой класс используется для работы с датами в Java 8 и новее?
Anonymous Quiz
14%
Date
66%
LocalDate
12%
Calendar
8%
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
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3🔥1
Забыл напомнить Вам что мы вновь встречаемся в 16:00 по МСК в Яндекс телемост!))))
А то опять никто не придет😂😂😂
Приходите давайте)))😎
А то опять никто не придет😂😂😂
Приходите давайте)))
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ребят, спешу извиниться, но видео я сегодня не выложу, так как неизвестный ублюдок заспамил конец встречи 😡
Обработаю и завтра выложу.
Надеюсь на понимание🤙
Обработаю и завтра выложу.
Надеюсь на понимание
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
"ИИ важнее, чем огонь или электричество."
Сундар Пичаи, CEO Google, сказал это в 2018 году в интервью MSNBC, подчеркивая революционность ИИ.
Почитать короткую биографию
#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
РБК Тренды
Миллиардер из трущоб: кто такой Сундар Пичаи
Уроженец Индии, инженер по образованию и любитель крикета — что нужно знать о генеральном директоре Google и холдинговой компании Alphabet Сундаре Пичаи?
👍1🤔1
Collectors в Java
Collectors.toMap
Collectors.toMap – это мощный коллектор, преобразующий элементы потока в Map<K, V>, где ключи и значения вычисляются на основе элементов потока.
1. Базовая форма: toMap(keyMapper, valueMapper)
Преобразует поток в Map, где:
keyMapper – функция, вычисляющая ключ,
valueMapper – функция, вычисляющая значение.
Сигнатура:
Пример:
2. Обработка дубликатов: toMap(keyMapper, valueMapper, mergeFunction)
Если возможны повторяющиеся ключи, нужно указать mergeFunction – стратегию разрешения конфликтов.
Сигнатура:
Примеры:
2.1. Оставить старое значение
2.2. Объединить значения (например, конкатенация строк)
2.3. Суммирование значений при дублировании ключей
3. Выбор реализации Map: toMap(keyMapper, valueMapper, mergeFunction, mapFactory)
Позволяет указать конкретную реализацию Map (например, LinkedHashMap или TreeMap).
Сигнатура:
Примеры:
3.1. Сохранение порядка вставки (LinkedHashMap)
3.2. Сортировка по ключу (TreeMap)
#Java #Training #Medium #Collectors #CollectorsToMap
Collectors.toMap
Collectors.toMap – это мощный коллектор, преобразующий элементы потока в Map<K, V>, где ключи и значения вычисляются на основе элементов потока.
1. Базовая форма: toMap(keyMapper, valueMapper)
Преобразует поток в Map, где:
keyMapper – функция, вычисляющая ключ,
valueMapper – функция, вычисляющая значение.
Сигнатура:
public static <T, K, U> Collector<T, ?, Map<K, U>> toMap(
Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper
)
Пример:
List<String> names = List.of("Alice", "Bob", "Charlie");
// Создаем Map: {имя -> длина строки}
Map<String, Integer> nameToLength = names.stream()
.collect(Collectors.toMap(
name -> name, // ключ – сама строка
name -> name.length() // значение – длина строки
));
// Результат: {"Alice":5, "Bob":3, "Charlie":7}
Что произойдет, если ключи повторяются?
→ Будет выброшено IllegalStateException!
2. Обработка дубликатов: toMap(keyMapper, valueMapper, mergeFunction)
Если возможны повторяющиеся ключи, нужно указать mergeFunction – стратегию разрешения конфликтов.
Сигнатура:
public static <T, K, U> Collector<T, ?, Map<K, U>> toMap(
Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction
)
Примеры:
2.1. Оставить старое значение
List<String> names = List.of("Alice", "Bob", "Alice");
Map<String, Integer> nameToLength = names.stream()
.collect(Collectors.toMap(
name -> name,
name -> name.length(),
(oldValue, newValue) -> oldValue // при конфликте берем старое значение
));
// Результат: {"Alice":5, "Bob":3}
2.2. Объединить значения (например, конкатенация строк)
List<String> names = List.of("A", "B", "A", "C");
Map<String, String> mergedLetters = names.stream()
.collect(Collectors.toMap(
letter -> letter,
letter -> letter,
(oldVal, newVal) -> oldVal + newVal // "A" + "A" → "AA"
));
// Результат: {"A":"AA", "B":"B", "C":"C"}
2.3. Суммирование значений при дублировании ключей
record Product(String id, double price) {}
List<Product> products = List.of(
new Product("A", 10.0),
new Product("B", 20.0),
new Product("A", 15.0)
);
Map<String, Double> totalPriceById = products.stream()
.collect(Collectors.toMap(
Product::id,
Product::price,
Double::sum // 10.0 + 15.0 = 25.0
));
// Результат: {"A":25.0, "B":20.0}
3. Выбор реализации Map: toMap(keyMapper, valueMapper, mergeFunction, mapFactory)
Позволяет указать конкретную реализацию Map (например, LinkedHashMap или TreeMap).
Сигнатура:
public static <T, K, U, M extends Map<K, U>> Collector<T, ?, M> toMap(
Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapFactory
)
Примеры:
3.1. Сохранение порядка вставки (LinkedHashMap)
Map<String, Integer> orderedMap = names.stream()
.collect(Collectors.toMap(
name -> name,
name -> name.length(),
(oldVal, newVal) -> oldVal,
LinkedHashMap::new
));
3.2. Сортировка по ключу (TreeMap)
Map<String, Integer> sortedMap = names.stream()
.collect(Collectors.toMap(
name -> name,
name -> name.length(),
(oldVal, newVal) -> oldVal,
TreeMap::new
));
#Java #Training #Medium #Collectors #CollectorsToMap
👍2
4. Особенности и подводные камни
4.1. Null-ключи и Null-значения
HashMap допускает один null-ключ, но если keyMapper возвращает null – будет NullPointerException.
Если valueMapper возвращает null, значение в Map будет null.
4.2. Параллельные стримы
toMap не оптимизирован для параллельных операций.
Вместо него лучше использовать Collectors.toConcurrentMap.
4.3. Изменяемые ключи
Если ключ изменяется после добавления в Map, это может нарушить работу HashMap (ключи должны быть immutable).
5. Альтернативы
5.1. Collectors.toUnmodifiableMap (Java 10+)
Создает неизменяемую Map:
5.2. Collectors.toConcurrentMap
Оптимизирован для многопоточности:
#Java #Training #Medium #Collectors #CollectorsToMap
4.1. Null-ключи и Null-значения
HashMap допускает один null-ключ, но если keyMapper возвращает null – будет NullPointerException.
Если valueMapper возвращает null, значение в Map будет null.
4.2. Параллельные стримы
toMap не оптимизирован для параллельных операций.
Вместо него лучше использовать Collectors.toConcurrentMap.
4.3. Изменяемые ключи
Если ключ изменяется после добавления в Map, это может нарушить работу HashMap (ключи должны быть immutable).
5. Альтернативы
5.1. Collectors.toUnmodifiableMap (Java 10+)
Создает неизменяемую Map:
Map<String, Integer> unmodifiableMap = names.stream()
.collect(Collectors.toUnmodifiableMap(
name -> name,
name -> name.length()
));
5.2. Collectors.toConcurrentMap
Оптимизирован для многопоточности:
ConcurrentMap<String, Integer> concurrentMap = names.stream()
.collect(Collectors.toConcurrentMap(
name -> name,
name -> name.length()
));
#Java #Training #Medium #Collectors #CollectorsToMap
👍4