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
⌨️ Срезы в стримах. Метод takeWhile
В Java 9 появилось два новых метода, полезных для выбора элементов потока с хорошей производительностью: takeWhile и dropWhile.
Допустим, у нас есть следующий список блюд:
List<Dish> specialMenu = Arrays.asList(
new Dish("seasonal fruit", 120),
new Dish("prawns", 300),
new Dish("rice", 350),
new Dish("chicken", 400),
new Dish("french fries", 530));
Для получения блюд с калорийностью меньше 320, можно воспользоваться операцией filter. Недостаток операции filter в том, что она требует прохода в цикле по всему потоку данных с применением предиката ко всем элементам.
В нашем примере список уже отсортирован по числу калорий. Вместо того, чтобы пройтись по каждому элементу, можно прекратить работу сразу же после обнаружения блюда, содержащего 320 калорий или более. В случае небольшого списка это может показаться не таким уж громадным преимуществом, но при работе с потенциально большим потоком элементов окажется весьма полезным.
Поможет нам в этом операция takeWhile! Она позволяет выполнить срез любого потока данных (даже бесконечного) с помощью предиката. И, к счастью, она прекращает работу сразу же по обнаружении неподходящего элемента. Вот как ее следует использовать:
List<Dish> sliceMenu1
= specialMenu.stream()
.takeWhile(dish -> dish.getCalories() < 320)
.collect(toList());
#java #stream #takeWhile6 818
Коллеги, всем привет!
Много людей в комментариях и личку давно просили больше тестов и наконец у меня дошли руки, чтобы сделать отдельный канал, в котором я буду ежедневно публиковать тесты по Java Core, а также Spring.
Тесты, которые там публикую можно спокойно использовать в том числе для подготовки к сертификации по:
▫️OCA/OCP экзаменам от Oracle
▫️Сертификации по Spring от VMWare.
Или просто когда скучно на перерыве за кофе)
Подключайтесь 👉 https://t.me/+fPICp5L0C_5hNDk6
6 818
⌨️ В каких состояниях может находиться поток?
Потоки могут находиться в одном из следующих состояний:
✔️ Новый (New). После создания экземпляра потока, он находится в состоянии Новый до тех пор, пока не вызван метод
start(). В этом состоянии поток не считается живым.
✔️ Работоспособный (Runnable). Поток переходит в состояние Работоспособный, когда вызывается метод start(). Поток может перейти в это состояние также из состояния Работающий или из состояния Блокирован. Когда поток находится в этом состоянии, он считается живым.
✔️ Работающий (Running). Поток переходит из состояния Работоспособный в состояние Работающий, когда Планировщик потоков выбирает его как работающий в данный момент.
✔️ Живой, но не работоспособный (Alive, but not runnable). Поток может быть живым, но не работоспособным по нескольким причинам:
▪️Ожидание (Waiting). Поток переходит в состояние Ожидания, вызывая метод wait(). Вызов notify() или notifyAll() может перевести поток из состояния Ожидания в состояние Работоспособный.
▪️Сон (Sleeping). Метод sleep() переводит поток в состояние Сна на заданный промежуток времени в миллисекундах.
▪️Блокировка (Blocked). Поток может перейти в это состояние, в ожидании ресурса, такого как ввод/вывод или из-за блокировки другого объекта. В этом случае поток переходит в состояние Работоспособный, когда ресурс становится доступен.
▪️Мёртвый (Dead). Поток считается мёртвым, когда его метод run() полностью выполнен. Мёртвый поток не может перейти ни в какое другое состояние, даже если для него вызван метод start().
#java #Thread #state6 818
ТОП-4 Курса по Программированию
⚡Tutortop — маркетплейс курсов №1 по количеству школ-партнеров, курсов и реальных отзывов студентов.
✅Хотите стать программистом, но не знаете с какого языка начать?
Помогаем разобраться в самых популярных и востребованных языках программирования.
Подарок в конце подборки!
Выбрать
#реклама 16+
tutortop.ru
О рекламодателе
6 818
⌨️ В чём заключается разница между методами start() и run() класса Thread?
Несмотря на то, что
start() вызывает метод run() внутри себя, это не то же самое, что просто вызов run(). Если run() вызывается как обычный метод, то он вызывается в том же потоке и никакой новый поток не запускается, как это происходит, в случае, когда вы вызываете метод start().
#java #Thread #start #run6 818
Регистрируйтесь на главную конференцию Yandex Cloud!
Большая конференция Yandex Cloud для тех, кто создаёт цифровые продукты и решения.
Вас ждут 5 тематических треков, 31 доклад, 50 экспертов, нетворкинг и общение.
Участие бесплатное!
Зарегистрироваться
#реклама 16+
scale.yandex.cloud
О рекламодателе
6 818
⌨️ Инициализация это процесс задания начальных значений переменным и объектам перед их использованием. Этот процесс необходим для того, чтобы обеспечить корректное начальное состояние переменных и объектов в программе.
Порядок инициализации
1⃣ Статические переменные: если в классе есть статические переменные, то они будут инициализированы в первую очередь. Переменные будут инициализированы в том порядке в котором идут в коде.
2⃣ Статический блок инициализации: далее сработает блок инициализации статических переменных.
3⃣ Переменные экземпляра
4⃣ Блок инициализации переменных экземпляра
5⃣ Конструктор
Вывод кода:
Static Variables initialized!
Static Initialization Block initialized!
Instance Variables initialized!
Instance Initialization Block initialized!
Constructor initialized!
Инициализация в Java является важным аспектом, который гарантирует, что объекты и переменные находятся в правильном состоянии перед их использованием. Понимание порядка инициализации помогает избегать ошибок и создавать надежные программы на Java.6 818
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
6 818
public class Quest {
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 10; i++) {
j = j++;
}
System.out.println(j);
}
}
#java #quest6 818
⌨️ Каким образом можно создать поток?
✔️ Создать потомка класса
Thread и переопределить его метод run();
✔️ Создать объект класса Thread, передав ему в конструкторе экземпляр класса, реализующего интерфейс Runnable. Этот интерфейс содержит метод run(), который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод run().
✔️ Вызвать метод submit() у экземпляра класса реализующего интерфейс ExecutorService, передав ему в качестве параметра экземпляр класса реализующего интерфейс Runnable или Callable (содержит метод call(), в котором описывается логика выполнения).
#java #Thread #Runnable #Callable6 818
+9
Помощь в трудоустройстве в IT-сфере!
По всей России объявили бесплатную программу на шестимесячное обучение по IT-cпециальностям.
Запись на участие в программе продлится до конца июля, но чтобы туда попасть, нужно пройти специальный профтест.
По результату тестирования сразу узнаете, какая профессия вам подойдет, и проходите ли вы на бесплатное обучение.
Перейти на сайт
#реклама 16+
urban-university.ru
О рекламодателе
6 818
⌨️ Создание скриншота
Этот код позволяет сделать снимок экрана и сохранить его в формате .png.
✅Toolkit.getDefaultToolkit().getScreenSize() — для получения размеров экрана;
✅ Robot — объект, который используется для захвата экрана;
✅ BufferedImage — объект, представляющий собой изображение экрана;
✅ ImageIO.write() — метод для сохранения захваченного изображения в файл с заданным именем и форматом.
#Java #Screenshot
6 818
+9
Помощь в трудоустройстве в IT-сфере!
В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специалистов. Теперь любой желающий может попробовать себя в IT с полного нуля и начать обучение бесплатно!
Узнайте про дальнейшее трудоустройство в ведущие IT-компании для восполнения кадрового дефицита.
Для этого нужно:
- Перейти по ссылке
- Заполнить анкету и ответить на вопросы (занимает менее 3 минут)
- На основании ваших ответов вы сразу узнаете, подходит ли вам сфера IT и сможете ли вы в ней работать
Перейти на сайт
#реклама 16+
urban-university.ru
О рекламодателе
6 818
⌨️ Класс Pattern
Pattern - это класс, представляющий собой компилированное представление регулярного выражения. Он позволяет создать объект-шаблон, который можно применить к строке для поиска соответствий определенному шаблону. Для создания объекта Pattern используется статический метод compile(), который принимает на вход строку с регулярным выражением.
Пример создания объекта Pattern:
Pattern pattern = Pattern.compile("\\d");
В примере мы компилируем регулярное выражение, которое соответствует любой цифре в строке. После компиляции мы можем использовать объект Pattern для поиска соответствий в строках. В результате будет выведено количество цифр в строке.
#java #Pattern6 818
Если вы сотрудник ИТ-компании, пройдите опрос о работе
Это займёт всего пять минут.
Всех, кто поможет ответить на вопросы исследования до 6 сентября, в конце анкеты ждёт сюрприз — возможность получить Apple AirPods Max в подарок! ✨
Перейти на сайт
#реклама
odna.co
О рекламодателе
6 818
⌨️ Виртуальные потоки (Virtual Threads) — это новая возможность, представленная в Java, начиная с версии 19 (в предварительном режиме), а окончательно внедрённая в версии 21. Они позволяют создавать и управлять миллионами потоков с минимальными затратами на системные ресурсы. Виртуальные потоки облегчают работу с конкурентными задачами и устраняют необходимость в сложных библиотеках и фреймворках для управления потоками.
Виртуальные потоки гораздо легче системных (они не привязаны к операционной системе), что позволяет их создавать в большом количестве.
Так же, виртуальные потоки совместимы с существующим экосистемой Java, включая традиционные блокирующие операции, такие как I/O.
public class VirtualThreadsExample {
public static void main(String[] args) throws InterruptedException {
// Создаем виртуальный поток
Thread virtualThread = Thread.ofVirtual().start(() -> {
try {
// Эмуляция длительной задачи
Thread.sleep(1000);
System.out.println("Hello from virtual thread!");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
// Дожидаемся завершения потока
virtualThread.join();
}
}
#java #VirtualThreads6 818
🚨 Не знаешь как подготовиться к собесу по Java? Хватит гадать, бери готовые ответы!
Очень часто на интервью по Java задают одни и те же вопросы по базовым темам, вне зависимости от копании и грейда!
Хотим порекомендовать новый материал от Павла Сорокина, в котором он агрегировал свой опыт прохождения собеседований и менторства и подробно разобрал самые частые вопросы по Java Core и многопоточности в одном видео-гайде.
🔥 Что внутри гайда?
📍Обзор самых популярных вопросов на собеседованиях по Java Core и многопоточности.
📍Пошаговые объяснения и лайфхаки, как правильно отвечать.
📍Запись успешного собеса на Junior в один из крупнейших российских финтехов.
Благодаря этому гайду ученики Паши легко проходят собеседования и получают офферы на 150-350 тысяч в крупнейшие компании. Теперь твоя очередь! Делимся видео-гайдом совершенно бесплатно 🎁
🚀 Переходи в бота, забирай гайд и будь готов к любому повороту на собесе!👇🏻
https://t.me/JavaLearnBot?start=c1724626210163-36-ds
