Статьи Утилиты Telegram YouTube VK Видео RuTube Отзывы

Статьи с тэгом «Java»

Генерация строки на основе шаблона

12 мая 2024

Тэги: maven, Apache, Java.

Предположим, вам нужно генерить текст по определённому шаблону. У вас есть заранее заготовленный текст, куда вы передаёте параметры для подстановки. Например, текст sms для клиента.

Самое первое, что приходит на ум – это воспользоваться методом String.format(). Как известно, он чувствителен к порядку следования элементов. Но что, если сам шаблон лежит у вас где-нибудь в базе данных и может измениться в любое время, а порядок параметров «зашит» в коде самого приложения? Согласитесь, было бы удобнее, чтобы каждый параметр подставлялся по имени, а не по порядку.

Следующее, что можно попробовать – это метод String.replace(). Но чтобы не писать очередной велосипед, лучше воспользоваться классом org.apache.commons.text.StringSubstitutor из популярной библиотеки Apache Commons Text.

Читать полностью...

Перебор элементов через Iterator

11 февраля 2024

Тэги: Java, Collections, алгоритмы, руководство.

Интерфейсы Iterator и Iterable часто используются для работы с коллекциями в Java. Они позволяют эффективно и безопасно работать с коллекциями, обеспечивая контроль над процессом перебора элементов (итерации).

Интерфейс Iterator

Паттерн Итератор

Интерфейс Iterator представляет собой одноимённый шаблон проектирования «Итератор» и содержит несколько методов. Нас интересуют два из них:

interface Iterator<E> {

    boolean hasNext();

    E next();
}
  1. Метод hasNext(), который возвращает true при наличии следующего элемента.
  2. Метод next(), который сдвигает указатель итератора на следующий элемент и возвращает этот элемент в качестве результата. Если доступных элементов не осталось – метод кидает исключение NoSuchElementException.

Пример использования интерфейса Iterator:

Читать полностью...

Подсчёт количества строк в текстовом файле

10 февраля 2024

Тэги: Java, алгоритмы, файлы.

Во многих редакторах при работе с текстовым документом вы можете видеть, сколько всего строк содержится в этом файле. Строки между собой разделяются символом перевода строки, который в каждой операционной системе (Windows, Unix, Mac) свой.

Давайте разберёмся, как быстро подсчитать количество строк в текстовом файле независимо от той ОС, в котором выполняется наш код. Более того, текстовый файл может быть сколь угодно большим, поэтому мы будем использовать буферизацию потока, чтобы не израсходовать всю доступную оперативную память.

Предположим, наш метод принимает на вход абсолютный путь до целевого файла, а возвращает количество строк в виде целочисленного типа long. Рассмотрим две реализации.

Читать полностью...

Как скомпилировать исходники java вручную

13 января 2024

Тэги: Java, файлы, руководство.

В современной разработке многие рутинные процессы автоматизированы достаточно хорошо, поэтому вам не приходится каждый раз компилировать ваши исходники вручную. Я не сомневаюсь, что вы прекрасно знаете, как это делается. А для тех, кто забыл или решил освежить свои знания, рассмотрим небольшой пример.

Наш проект будет состоять всего из двух классов, причём один будет вызывать метод другого.

Класс Greeter содержит метод sayHello(). Этот метод выводит приветствие на экран:

package ru.devmark.helper;

public class Greeter {
    public void sayHello() {
        System.out.println("Привет, мир!");
    }
}

Сохраним этот исходный код в текстовый файл, имя которого обязательно должно совпадать с именем класса, т.е. Greeter.java.

Читать полностью...

Конфигурационные файлы в Spring Boot

28 декабря 2023

Тэги: Spring Boot, rest, Java, yaml, файлы.

Значения параметров системы удобно отделять от программного кода, чтобы можно было их менять без перекомпиляции всего приложения. Spring Boot предоставляет нам удобный способ работы с конфигурационными файлами. Ниже мы рассмотрим несколько случаев, начиная с самого простого.

Одиночные параметры

Отдельное свойство можно внедрить в любой компонент Spring при помощи аннотации @Value.

Предположим, у нас есть простейшее Spring Boot приложение, в котором есть rest-контроллер с методами.

Добавим метод, который в ответ возвращает приветственный текст для пользователя, а имя пользователя будем брать из конфига.

Читать полностью...

Pattern matching в switch

17 ноября 2023

Тэги: Java, руководство, ООП.

В Java 21 наряду с SequencedCollection (см. SequencedCollection и SequencedSet и SequencedMap) из статуса preview в статус production-ready перешла ещё одна фича – шаблоны сравнения (pattern matching) для конструкции switch. Рассмотрим возможности этой конструкции на конкретных примерах.

Простой пример

Предположим, что мы пишем метод displayScale(), в котором надо определить количество знаков после запятой в переданном нам числе. Причём это число поступает на вход как самый базовый тип Object. Напомню, что базовым для всех чисел является класс Number. Его производными типами являются, например, целые числа Integer и числа с произвольной точностью BigDecimal.

Иерархия числовых классов в Java
Читать полностью...

SequencedMap

8 ноября 2023

Тэги: Java, Collections, ООП.

В статье SequencedCollection и SequencedSet в Java мы рассмотрели интерфейс SequencedCollection, который появился в Java 21. Также узнали про его более частный случай – интерфейс SequencedSet.

Теперь перейдём к интерфейсу SequencedMap, который обладает сходным функционалом, но не входит напрямую в иерархию SequencedCollection.

interface SequencedMap<K, V> extends Map<K, V> {
    SequencedMap<K, V> reversed();
    Map.Entry<K,V> firstEntry();
    Map.Entry<K,V> lastEntry();
    Map.Entry<K,V> pollFirstEntry();
    Map.Entry<K,V> pollLastEntry();
    V putFirst(K k, V v);
    V putLast(K k, V v);
    SequencedSet<K> sequencedKeySet();
    SequencedCollection<V> sequencedValues();
    SequencedSet<Map.Entry<K, V>> sequencedEntrySet();
}
Читать полностью...

SequencedCollection и SequencedSet

3 ноября 2023

Тэги: Java, Collections, алгоритмы, ООП.

SequencedCollection

В Java 21 появилась новая группа интерфейсов коллекций, самым основным из которых является SequencedCollection. Он расширяет базовый интерфейс Collection, добавляя в него ряд полезных методов для манипуляций с первым и последним элементами, а также для инвертирования коллекции:

interface SequencedCollection<E> extends Collection<E> {
    void addFirst(E e);
    void addLast(E e);
    E getFirst();
    E getLast();
    E removeFirst();
    E removeLast();
    SequencedCollection<E> reversed();
}

Две основных реализации интерфейса List (ArrayList и LinkedList) также поддерживают этот интерфейс.

Иерархия интерфейсов и классов SequencedCollection
Читать полностью...

Работа с коллекциями

2 ноября 2023

Тэги: Kotlin, Java, Collections, Stream API.

В этой статье хотелось бы сделать шпаргалку для тех, кто только начинает осваивать Kotlin. Этот язык предлагает широкий набор методов для работы с коллекциями. Многие начинают осваивать его, уже имея за плечами опыт на Java, поэтому мне хотелось бы привести также варианты кода и на Java.

Создаём класс-сущность

Для того, чтобы нам было от чего отталкиваться, создадим класс-сущность. Это класс, предназначенный для хранения данных. Часто в приложениях поля таких классов мапятся один к одному на поля таблицы в базе данных. Для примера рассмотрим сущность «Город», у которой есть два атрибута: название и количество проживающих в нём людей.

Читать полностью...

Алгоритм инверсии двусвязного списка

8 мая 2023

Тэги: Java, алгоритмы, головоломки.

Двусвязный список – это структура данных, которая состоит из узлов, каждый из которых имеет ссылки на следующий и предыдущий элементы. Одна из часто используемых операций на двусвязных списках – это инверсия списка, то есть изменение порядка элементов на обратный.

Структура элемента

Класс Node, представляющий собой один элемент списка, выглядит следующим образом:

class Node {
    int value;
    Node next; // всегда null у последнего элемента
    Node prev; // всегда null у первого элемента

    Node(int value) {
        this.value = value;
        this.next = null;
        this.prev = null;
    }
}
Читать полностью...

❮ Назад Далее ❯