Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
Метод dropWhile был введен в интерфейсе Stream в JDK 9. Этот метод позволяет пропускать элементы в начале потока данных, пока они удовлетворяют определенному условию, и возвращает новый поток, начиная с первого элемента, который не соответствует условию.

В нашем примере метод dropWhile используется для пропуска элементов в потоке до тех пор, пока они меньше 0. После первого элемента, не соответствующего условию, оставшиеся элементы добавляются в новый поток.
👍14🔥1
Класс Properties

В Java класс Properties представляет собой таблицу хэш-значений ключ-значение. Он является частью пакета java.util, и обычно используется для работы с конфигурационными файлами, настройками приложений и другими данными в формате ключ-значение.

Некоторые методы класса Properties:

setProperty(String key, String value) - добавление или изменение значения ключа.

getProperty(String key) - получение значения по ключу.

load(InputStream in) - загрузка свойств из InputStream.

store(OutputStream out, String comments) - сохранение свойств в OutputStream.

defaults(Properties defaults) - устанавливает значения по умолчанию, которые будут использоваться при поиске значения для ключа, если оно не найдено в текущих свойствах.

Пример файла Properties:
version=1.0
name=TestApp
👍9👏2
😁15🤣7
Цепочка методов (Method chaining) — это общий синтаксис для нескольких вызовов методов в объектно-ориентированных языках программирования. Каждый метод возвращает объект, что позволяет объединить вызовы в один оператор без необходимости использования переменных для хранения промежуточных результатов.

Пример для String:

text = text
.trim()
.replace("?", "")
.replace(" ", "-")
.toLowerCase();


Для того чтобы сделать такую штуку в своем классе, нужно что бы каждый метод возвращал из метода ссылку на текущий объект (this).
👍26🔥1😁1
Ромб

Интересная задача для тренеровки мозга. Нужно в ASCII-графике (скажем так) вывести ромб заданной размерности.
Не смотрите сразу решение, попытайтесь решить сами. Код вашего решения пишите в комментах, интересно как еще можно это сделать.


*
***
*****
*******
*****
***
*


Алгоритм: поместим центр координат в центр ромба, в результате для каждой из 4х плоскостей мы увидим закономерность: там где сумма x и y (без знака) меньше или равна половине размерности ромба, там стоит *, иначе пробел.
👍8
HttpClient представляет собой класс, введенный в Java 11, который предоставляет более современный и гибкий способ для выполнения HTTP-запросов и обработки HTTP-ответов. Он заменяет устаревший HttpURLConnection и предоставляет более удобный интерфейс для работы с сетевыми операциями.

HttpClient также поддерживает асинхронные операции, позволяя выполнять запросы асинхронно с использованием CompletableFuture.
👍12🔥2
Контракт метода hashCode

Для реализации хэш-функции в спецификации языка определены следующие правила:

1️⃣ вызов метода hashCode один и более раз над одним и тем же объектом должен возвращать одно и то же хэш-значение, при условии что поля объекта, участвующие в вычислении значения, не изменялись.

2️⃣ вызов метода hashCode над двумя объектами должен всегда возвращать одно и то же число, если эти объекты равны (вызов метода equals для этих объектов возвращает true).

3️⃣ вызов метода hashCode над двумя неравными между собой объектами должен возвращать разные хэш-значения. Хотя это требование и не является обязательным, следует учитывать, что его выполнение положительно повлияет на производительность работы хэш-таблиц.
👍12🔥3👎1
class Cat {
public static void mew() {
System.out.println("Meow");
}
}

class SimonsCat extends Cat {
public static void mew() { }
}

public class Mew {
public static void main(String[] args) {
Cat cat = new Cat();
Cat simonsCat = new SimonsCat();
cat.mew();
simonsCat.mew();
}
}
👍6👏2
Retrofit - это библиотека для работы с HTTP-запросами в Java и Android, разработанная компанией Square. Основной целью Retrofit является упрощение выполнения сетевых запросов и преобразование HTTP-ответов в объекты Java. Retrofit использует аннотации Java для определения типа запроса, параметров, URL и других свойств.

Retrofit предоставляет удобный способ выполнения асинхронных запросов. Вы можете использовать Call как для выполнения синхронного вызова (call.execute()), так и для выполнения запросов асинхронно (call.enqueue(...)).

Retrofit поддерживает использование интерсепторов для манипуляции запросами и ответами. Это может быть полезно для добавления заголовков, логирования и других операций.

Библиотека Retrofit предоставляет удобные средства для работы с сетевыми запросами, уменьшая объем необходимого кода и обеспечивая чистый и читаемый интерфейс для взаимодействия с удаленными API.
👍11👏31
Несколько способов для избежания NullPointerException:

👉 Используйте Optional из пакета java.util.

👉 При сравнении константы с переменной пришедшей из вне, нужно вызывать equals() на константе.

👉 А при сравнении двух переменных используйте java.util.Objects#equals.

👉 Используйте библиотеки с null-безопасностью, например, Apache Commons StringUtils.

👉 Вызывайте методы equals() и equalsIgnoreCase() на известных объектах.

👉 Применяйте valueOf() вместо toString().

👉 Воспользуйтесь аннотациями @NotNull и @Nullable на основе IDE.

👉 При возврате из метода коллекций, не стоит возвращать null, лучше пустую коллекцию (java.util.Collections#emptyList).
🔥24👍11
Метод retainAll()

Метод retainAll() интерфейса Collection, удаляет из коллекции все элементы, не содержащиеся в переданной коллекции. По сути оставляет в коллекции только пересекающиеся элементы из двух коллекций.


boolean retainAll(Collection<?> c);


Параметры:
c – коллекция, содержащая элементы, которые следует сохранить в коллекции.

Возврат:
true, если коллекция изменилась в результате вызова
👍22🏆1
BIRT (Business Intelligence and Reporting Tools) - это открытая платформа, предоставляющая возможности для создания отчетов и бизнес-аналитики в приложениях, разрабатываемых на языке программирования Java. Эта платформа предоставляет инструменты для создания, развертывания и поддержки отчетов различной сложности.

Вот несколько ключевых аспектов BIRT:

Дизайнер отчетов (BIRT Designer)
BIRT предоставляет визуальный дизайнер отчетов, который позволяет разработчикам создавать отчеты с использованием различных элементов, таких как таблицы, графики, текстовые блоки и т.д. Этот дизайнер встроен в Eclipse IDE, что упрощает интеграцию с существующими проектами Java.

Интеграция с Java-приложениями
BIRT обеспечивает простую интеграцию с Java-приложениями. Вы можете использовать BIRT Runtime API для встраивания отчетов в свои приложения. Это позволяет вам создавать динамические отчеты, которые могут быть сгенерированы на лету в ответ на запросы пользователей.

Поддержка различных источников данных
BIRT может работать с различными источниками данных, такими как базы данных (SQL, JDBC), веб-службы, XML-файлы и другие. Это обеспечивает гибкость при работе с данными из различных источников.

Мощные возможности форматирования
BIRT предоставляет обширные возможности по форматированию отчетов. Вы можете настраивать внешний вид отчетов, включая шрифты, цвета, стили линий, и т.д.

Генерация различных форматов отчетов
BIRT поддерживает генерацию отчетов в различных форматах, таких как HTML, PDF, Excel, Word и другие. Это позволяет пользователям получать отчеты в удобных для них форматах.

Система расширений
BIRT предоставляет механизм для создания пользовательских расширений, что позволяет разработчикам расширять функциональность платформы в соответствии с конкретными требованиями проекта.

Открытый исходный код
BIRT является проектом с открытым исходным кодом, что обеспечивает доступность и гибкость для разработчиков. Это также означает наличие сообщества, которое может предоставить поддержку и ресурсы для пользователей BIRT.

Для начала работы с BIRT, вы можете загрузить Eclipse IDE, которая включает в себя BIRT Designer. После установки вы сможете создавать, редактировать и интегрировать отчеты BIRT в ваши Java-приложения.
👍7🔥1🏆1
Метод putIfAbsent() интерфейса Map. Если указанный ключ еще не связан со значением (или сопоставлен со значением null), он связывает его с заданным значением и возвращает значение null, в противном случае возвращается текущее значение.


default V putIfAbsent(K key, V value) {
V v = get(key);
if (v == null) {
v = put(key, value);
}

return v;
}

Параметры:
key – ключ, с которым должно быть связано указанное значение. value – значение, которое должно быть связано с указанным ключом.

Возврат:
предыдущее значение, связанное с указанным ключом, или значение null, если для ключа не было сопоставления. Возврат null может также указывать на то, что мапа ранее ассоциировала с ключом значение null, если реализация поддерживает значения null.
👍6🔥1
⌨️ Можно ли объявить метод абстрактным и статическим одновременно?

Нет. В таком случае компилятор выдаст ошибку: "Illegal combination of modifiers: ‘abstract’ and ‘static’".

Модификатор abstract говорит, что метод будет реализован в другом классе, а static наоборот указывает, что этот метод будет доступен по имени класса.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🎄3
⌨️ Где и для чего используется модификатор abstract?

Класс, помеченный модификатором abstract, называется абстрактным классом. Такие классы могут выступать только предками для других классов. Создавать экземпляры самого абстрактного класса не разрешается. При этом наследниками абстрактного класса могут быть как другие абстрактные классы, так и классы, допускающие создание объектов.

Метод, помеченный ключевым словом abstract - абстрактный метод, т.е. метод, который не имеет реализации. Если в классе присутствует хотя бы один абстрактный метод, то весь класс должен быть объявлен абстрактным.

Использование абстрактных классов и методов позволяет описать некий шаблон объекта, который должен быть реализован в других классах. В них же самих описывается лишь некое общее для всех потомков поведение.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥3🎄1
⌨️ Какими значениями инициализируются переменные по умолчанию?

byte — (byte)0;
short — (short)0;
int — 0;
long — 0L;
float — 0f;
double — 0d;
char — \u0000;
boolean — false;
Объекты (в том числе String) — null.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥3
⌨️ Как получить доступ к переопределенным методам родительского класса?

С помощью ключевого слова super мы можем обратиться к любому члену родительского класса - методу или полю, если они не определены с модификатором private.

super.method();
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🎄311
void и Void

В языке программирования Java ключевое слово void используется для указания, что метод не возвращает никакого значения. Метод с возвращаемым типом void выполняет определенные действия, но не производит результат, который можно было бы использовать в вызывающей части программы.

Для void еще есть класс обёртка Void. Класс Void — это класс-заполнитель который нельзя создать и который хранит ссылку на объект Class, представляющий ключевое слово Java void.

Этот класс можно использовать, например, в случаях, когда у вас есть обобщенный класс и вы хотите, чтобы метод ничего не возвращал (т.е. чтобы пользователь класса не ожидал ничего особенного оттуда получить):


interface I<T> {
T doStuff();
}

class A implements I<Void> {
@Override
public Void doStuff() {
// ничего другого вернуть нельзя
return null;
}
}


Или если в проекте регулярно используется Callable<T> для выполнения каких-то асинхронных задач и в тех ситуациях, когда результат работы задачи ничего не должен возвращать, можно реализовать Callable<Void>.
👍162🔥1👏1
😁22🤣7👍4🙈2❤‍🔥1