Java | Фишки и трюки
Open in Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg
Show more6 813
Subscribers
No data24 hours
-137 days
-6630 days
Posts Archive
6 818
Stream
Все операции Stream делятся на промежуточные и терминальные и объединяются в потоковые конвейеры.
Потоковый конвейер состоит из источника (например, коллекции, массива, функции-генератора, канала ввода-вывода или генератора бесконечной последовательности) за которым следует ноль или более промежуточных операций и терминальной операции.
Промежуточные операции
📌 Промежуточные операции не выполняются до тех пор, пока не будет вызвана какая-либо терминальная операция.
Они составляют конвейер выполнения Stream. Промежуточную операцию можно добавить в конвейер Stream методами:
filter()
map()
flatMap()
distinct()
sorted()
peek()
limit()
skip()
Все промежуточные операции являются ленивыми, поэтому они не выполняются до тех пор, пока результат обработки действительно не понадобится.
По сути, промежуточные операции возвращают новый поток. Выполнение промежуточной операции фактически не выполняет никакой операции, а вместо этого создает новый поток, который при прохождении содержит элементы исходного потока, соответствующие данному предикату.
Таким образом, обход потока не начинается до тех пор, пока не будет выполнена терминальная операция конвейера.
Это очень важное свойство, особенно важное для бесконечных потоков, поскольку оно позволяет нам создавать потоки, которые будут фактически вызываться только при вызове терминальной операции.
Терминальные операции
Терминальные операции могут проходить через поток для получения результата или побочного эффекта.
📌 После выполнения терминальной операции, потоковый конвейер считается использованным и больше не может использоваться.
Терминальные операции:
forEach()
forEachOrdered()
toArray()
reduce()
collect()
min()
max()
count()
anyMatch()
allMatch()
noneMatch()
findFirst()
findAny()
Каждая из этих операций инициирует выполнение всех промежуточных операций.6 818
«Где Дата, Коль?». Первое реалити-шоу про дата-инженеров
Новый проект учебного центра Слёрм и Николая Маркова, Data Platform Lead в компании Altenar.
👀 Мы выбрали 5 участников, чтобы 14 недель подряд наблюдать, как они проходят наш курс «Data-инженер». И отлично справляются, набирая баллы, или лажают, пропуская дедлайны 🙂
Чтобы дойти до финала, участники должны освоить Python, MapReduce и ETL-инструменты, разобраться с Hadoop, NOSQL, Airflow, Kafka, аналитикой и архитектурой хранилищ данных.
Каждые две недели выходит новая серия. Ментор и ревьюеры разбирают сделанные домашки участников, комментируют результаты и обновляют турнирную таблицу.
❗️Главное правило: Кто перестаёт учиться — выбывает из проекта. Никаких исключений!
Кто справится со всеми заданиями вовремя? Кому ревьюер выставит самый высокий балл? Кто вылетит? А кто получит главный приз?
Ответы на эти вопросы, новости с шоу, а также статьи, кейсы и best practices для начинающего дата-инженера — в канале проекта: 👉 @gdedata
Подписывайтесь!
Реклама. ИП Аердинов Н.В. ИНН 638103515932 erid: LjN8K97oM
6 818
⌨️ Неизменяемые коллекции
Для получения неизменяемого варианта коллекции, в классе Collections есть соответствующие методы:
unmodifiableCollection unmodifiableSequencedCollection unmodifiableSet unmodifiableSequencedSet unmodifiableSortedSet unmodifiableNavigableSet unmodifiableList unmodifiableMap unmodifiableSequencedMap unmodifiableSortedMap unmodifiableNavigableMapПоскольку неизменяемые коллекции нельзя изменить, разработчики могут быть уверены, что состояние коллекции не будет неожиданно изменено в других частях программы. В некоторых случаях неизменяемые коллекции могут повышать производительность, так как операции над такими коллекциями не требуют блокировок и синхронизации.
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
List<String> unmodifiableList = Collections.unmodifiableList(list);
// Попытка изменить unmodifiableList приведет к UnsupportedOperationException
// unmodifiableList.remove("B");
#java #collections #immutable #unmodifiable6 818
Привет! Рекомендую подписаться на канал Java: fill the gaps, полезно для разработчиков любого уровня🔥
Для продолжающих:
🔹 Как реализованы лямбда выражения внутри JVM
🔹 Библиотеки работы с данными: от JDBC до Spring Data
🔹 3 способа подружить Postgres и Kafka
Для начинающих:
🔸 5 ошибок при использовании Optional
🔸 Fluent API: что такое и зачем нужен
🔸 Как освоить многопоточку
Подписывайся👉 Java: fill the gaps
6 818
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Quest {
public static void main(String[] args) {
List<String> list = Stream.of("Pizza", "Sushi", "Pasta", "Sushi", "Pizza")
.sequential()
.filter(new TreeSet<>()::add)
.collect(Collectors.toList());
System.out.println(list);
}
}6 818
Открытый урок. Аллокаторы в C++: Что делать, если менеджер памяти вас разочаровывает?
C++ известен тем, что позволяет работать с памятью напрямую. Здесь вы точно знаете, где и как расположен каждый из ваших объектов, сколько памяти он занимает.
Но можете ли вы принимать решение, где и как будет размещен ваш объект? Часто стандартные методы выделения памяти не удовлетворяют узким требованиям конкретной логики.
Присоединяйтесь к открытому вебинару 8 августа в 20:00 мск! Поговорим, зачем в C++ существуют аллокаторы: https://clck.ru/3CCTpL
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 818
⌨️ Почему String неизменяемый класс?
Есть несколько преимуществ в неизменности строк:
✔️ Пул строк возможен только потому, что строка неизменяемая, таким образом виртуальная машина сохраняет больше свободного места в Heap, поскольку разные строковые переменные указывают на одну и ту же переменную в пуле. Если бы строка была изменяемой, то интернирование строк не было бы возможным, потому что изменение значения одной переменной отразилось бы также и на остальных переменных, ссылающихся на эту строку.
✔️ Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.
✔️ Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.
✔️ Строки используются classloader и неизменность обеспечивает правильность загрузки класса.
✔️ Поскольку строка неизменяемая, её hashCode() кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в HashMap т.к. его обработка происходит быстрее.
#java #string #immutable
6 818
👩💻 Программирование теперь в телеграм!
Вот обширная база материалов, которая ежедневно обновляется, выбирай своё направление:
Обучение Java с нуля
Обучение Python с нуля
Обучение JavaScript с нуля
Обучение HTML/CSS с нуля
Обучение C/С++ с нуля
Обучение С# с нуля
Обучение SQL/GO/PHP с нуля
Обучение Kotlin/Swift с нуля
⛓ Курсы, книги, шпаргалки, статьи, видео, ресурсы — всё собрано в одном месте: @roadmap_ready
6 818
⌨️ Особенности класса String
✔️ Это неизменяемый (immutable) и финализированный тип данных;
✔️ Строки-литералы, интернированные объекты класса String JVM хранит в пуле строк;
✔️ Объект класса
String можно получить, используя двойные кавычки;
✔️ Можно использовать оператор + для конкатенации строк;
✔️ Начиная с Java 7 строки можно использовать в конструкции switch.
#java #string6 818
Для тех кто просил, наш канал с мемами для айтишников и программистов
👇🏻
https://t.me/+Lf7ASxaQwd5mNmYy
6 818
⌨️ PriorityQueue — это реализация структуры данных очередь с приоритетом, которая упорядочивает элементы по их естественному порядку или по заданному компаратору. Она представляет собой часть коллекции Java Collections Framework и находится в пакете java.util.
В отличие от Queue, элементы PriorityQueue не упорядочены по времени их добавления, а по приоритету.
Основные методы:
add(E e) - добавляет элемент в очередь.
remove() - удаляет и возвращает элемент с наивысшим приоритетом. Если очередь пуста, генерируется исключение
NoSuchElementException.
poll() - удаляет и возвращает элемент с наивысшим приоритетом. Если очередь пуста, возвращает null.
peek() - возвращает, но не удаляет элемент с наивысшим приоритетом. Если очередь пуста, возвращает null.
element() - возвращает, но не удаляет элемент с наивысшим приоритетом. Если очередь пуста, генерируется исключение NoSuchElementException.
Пример:
class Task implements Comparable<Task> {
String name;
Integer priority;
public Task(String name, Integer priority) {
this.name = name;
this.priority = priority;
}
@Override
public int compareTo(@NotNull Task o) {
return priority - o.priority;
}
}
public class Test {
public static void main(String[] args) {
PriorityQueue<Task> pq = new PriorityQueue<>();
pq.add(new Task("Task1", 1));
pq.add(new Task("Task5", 5));
pq.add(new Task("Task2", 2));
pq.add(new Task("Task4", 4));
pq.add(new Task("Task3", 3));
while (!pq.isEmpty()) {
System.out.println(pq.poll().name);
// Выведет: Task1, Task2, Task3, Task4, Task5
}
}
}
#java #PriorityQueue6 818
⌨️ PriorityQueue — это реализация структуры данных очередь с приоритетом, которая упорядочивает элементы по их естественному порядку или по заданному компаратору. Она представляет собой часть коллекции Java Collections Framework и находится в пакете java.util.
В отличие от Queue, элементы PriorityQueue не упорядочены по времени их добавления, а по приоритету.
Основные методы:
add(E e) - добавляет элемент в очередь.
remove() - удаляет и возвращает элемент с наивысшим приоритетом. Если очередь пуста, генерируется исключение
NoSuchElementException.
poll() - удаляет и возвращает элемент с наивысшим приоритетом. Если очередь пуста, возвращает null.
peek() - возвращает, но не удаляет элемент с наивысшим приоритетом. Если очередь пуста, возвращает null.
element() - возвращает, но не удаляет элемент с наивысшим приоритетом. Если очередь пуста, генерируется исключение NoSuchElementException.
Пример:
class Task implements Comparable<Task> {
String name;
Integer priority;
public Task(String name, Integer priority) {
this.name = name;
this.priority = priority;
}
@Override
public int compareTo(@NotNull Task o) {
return priority - o.priority;
}
}
public class Test {
public static void main(String[] args) {
PriorityQueue<Task> pq = new PriorityQueue<>();
pq.add(new Task("Task1", 1));
pq.add(new Task("Task5", 5));
pq.add(new Task("Task2", 2));
pq.add(new Task("Task4", 4));
pq.add(new Task("Task3", 3));
while (!pq.isEmpty()) {
System.out.println(pq.poll().name);
// Выведет: Task1, Task2, Task3, Task4, Task5
}
}
}
#java #PriorityQueue6 818
Знания, профессиональный английский и хороший юмор — набор любого айтишника🔥
А быть в тренде и качать необходимые скиллы помогут наши каналы:
⏩ Библиотека Кодера — книги, ресурсы, шпаргалки и статьи для разработчиков
⏩ CodeLang — английский язык в IT-сфере
⏩ JSON → Айти Memes — мемы для программистов и айтишников
6 818
🖥 Интересно про то как у нас в Java 23 должна была быть, но не будет, интерполяция строк (String Templates)
В большинстве современных языков программирования уже есть интерполяция строк. Вот и в нашем любимом языке это должно было быть, но к сожалению придется ещё немного подождать.
Это должно было выглядеть так:
String name = "Melissa";
System.out.println("Hello, \{name}!");
// Hello, Melissa!
Habr
#java #StringTemplates6 818
Что должен знать HR
1. Трудовое законодательство (тут вы улыбнетесь. Очевидно!)
2. Принципы поиска и отбора персонала (тут тоже смешно, кажется)
3. Кадровое делопроизводство (и тут нам есть, что сказать)
Подписывать документы за пару минут со смартфона удобно и реально. КЭДО + Госключ от Битрикс24 поможет быстро и бесплатно получить усиленную ЭП и даст возможность подписывать с сотрудниками документы от мат.ответственности до трудового договора в пару кликов.
А еще в Битрикс24 можно корпоративно чатиться в мессенджере, креативить с AI, синхронизироваться по видео до 100 человек, ставить задачи и продавать с CRM.
Качественно экономьте и работайте на полную мощность вашего бизнеса с Битрикс24
Узнать больше
#реклама
bitrix24.ru
О рекламодателе
6 818
⌨️ Какая основная разница между String, StringBuffer, StringBuilder?
Класс String является неизменяемым (immutable) - модифицировать объект такого класса нельзя, можно лишь заменить его созданием нового экземпляра.
Класс StringBuffer изменяемый - использовать StringBuffer следует тогда, когда необходимо часто модифицировать содержимое.
Класс StringBuilder был добавлен в Java 5 и он во всем идентичен классу StringBuffer за исключением того, что он не синхронизирован и поэтому его методы выполняются значительно быстрей.
#java #String #StringBuffer #StringBuilder
