Статьи
Утилиты Telegram YouTube Отзывы

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

Как получить параметры окружения

6 мая 2018

Тэги: Java.

Метод System.getProperties() возвращает список системных свойств (параметров окружения), доступных для данной виртуальной машины. Свойство представляет из себя пару «ключ-значение». Среди полученных свойств всегда можно обнаружить следующие:

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

Запуск задач по расписанию в Spring Boot

3 мая 2018

Тэги: Spring Boot, maven, Spring, Java.

Часто в приложениях возникает необходимость выполнять некоторые действия по расписанию, а не по запросу извне. Первое, что приходит на ум – это планировщик cron. Но если вы пишете приложение, используя Spring Boot, то можете реализовать похожий функционал, добавив всего пару аннотаций.

В качестве примера давайте создадим простой maven-проект. Затем пропишем в pom-файле Spring Boot как родителя для данного проекта:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.12.RELEASE</version>
</parent>

Также у вас должна быть секция build со стандартным содержимым:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Теперь добавим стандартный main-класс:

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

Создание runnable jar файла с помощью maven

2 мая 2018

Тэги: Java, maven, Apache.

Понятие runnable jar или uber jar возникает тогда, когда вы задумываетесь о разворачивании вашего проекта на удалённом сервере. У вас должна быть уверенность в том, что в произвольном окружении, где окажется ваше приложение, в classpath будут все необходимые классы из используемых вами библиотек.

Конечно, никакой проблемы нет, если вы вообще не используете сторонние библиотеки. Но я уверен, что всё-таки используете, если только ваш проект не «Hello World».

Чтобы гарантировать наличие нужных версий всех библиотек, нам проще поставлять их вместе с нашим приложением. Для удобства развёртывания все библиотеки можно поместить в один jar-файл. Подробнее о том, что такое jar-архив и как его получить, мы рассматривали в статье Как скомпилировать исходники java вручную.

Рассмотрим конкретный пример. Пусть имеется приложение, которое использует класс StringUtils из популярного проекта Apache Commons Lang:

package ru.devmark;

import org.apache.commons.lang3.StringUtils;

public class Main {

    public static void main(String[] args) {
        System.out.println(StringUtils.isBlank(""));
    }
}

В pom-файле нашего maven-проекта должно быть прописано следующее:

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

Как обменять значения двух переменных без буфера

1 мая 2018

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

Если перед вами встанет задача обменять значения двух числовых переменных a и b между собой, скорее всего, вы сделаете это так:

int buffer = a;
a = b;
b = buffer;

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

А что, если нам нужно обменять значения числовых переменных между собой, не создавая новых переменных?

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

Удобные методы работы с Map

28 апреля 2018

Тэги: Collections, Java.

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

Обход всей коллекции в цикле

Для того, чтобы пройтись по всем элементам коллекции и вывести значения на экран, раньше мы бы писали такой код:

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getValue());
}

В java 8 появился метод foreach(), который принимает лямбда-функцию из двух параметров: ключ и значение. Указанный выше код можно записать одной строкой:

map.forEach((k, v) -> System.out.println(v));
Читать полностью...

Тестирование System.out.print в JUnit

27 апреля 2018

Тэги: JUnit, Java.

Предположим, что у вас имеется метод, который вместо логов просто выводит какой-то текст через стандартный поток вывода:

public class Example {

    public void doSomeLogic() {
        System.out.print("Test string");
    }
}

И перед вами встаёт задача написать юнит-тест на то, что данный метод действительно выводит данную строку. Для тестирования будем использовать библиотеку JUnit.

Если бы он просто возвращал её как результат своей работы, мы бы проверяли его через Assert.equals(). Но если мы хотим тестировать вывод, то перед началом теста нам надо создать свой собственный поток, подсунуть его как стандартный вывод, выполнить необходимые проверки, а затем вернуть всё обратно.

В качестве реализации потока будем использовать ByteArrayOutputStream, поскольку его можно легко преобразовать в строку. Тестовый класс будет выглядеть так:

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

Stream API

27 апреля 2018

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

В Java 8 появилось довольно важное нововведение под названием Stream. И здесь имеются в виду не потоки ввода/вывода. Stream – это абстракция, позволяющая с любыми объектами работать как с потоками данных. Порой это чем-то похоже на выполнение запросов к БД. Рассмотрим несколько типовых задач, с которыми часто сталкивается каждый разработчик.

Объединение нескольких строк в одну

Наверняка вам приходилось генерить одну строку из нескольких других, разделённых запятыми. При этом после последнего элемента запятой быть не должно. Знакомо? В java 8 это делается так:

Stream.of("Linux", "Windows", "Mac")
    .collect(Collectors.joining(", ")));

Мы создаём новый поток из простых строк, а затем собираем их в одну при помощи метода collect(). В результате получим следующую строку:

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

Выравнивание числа ведущими нулями

12 января 2018

Тэги: Java, maven, Apache.

Рассмотрим случай, когда у вас есть некое число, количество цифр в котором заранее неизвестно и вам необходимо, чтобы число всегда составляло 5 знаков, то есть нужно добавить необходимое количество нулей слева. Есть целых два способа сделать это.

Без использования сторонних библиотек

Если у вас небольшой проект и не хочется тянуть лишнюю зависимость, то используйте String.format():

System.out.println(String.format("%05d", 42));

В результате мы увидим строку «00042». К недостаткам данного способа можно отнести то, что нужно помнить правила форматирования в методе String.format().

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

Генерация случайных чисел при помощи Stream API

10 января 2018

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

В Java 8 у класса java.util.Random появился набор удобных методов для генерации стримов (Stream) случайных чисел для всех основных числовых типов. Например:

private List<Integer> randomIntsGenerator() {
    return new Random()
            .ints(25, 1, 6)
            .boxed()
            .collect(Collectors.toList());
}
Читать полностью...

Передача null в перегруженный метод

4 января 2018

Тэги: ООП, Java, головоломки.

Такой вопрос на знание Java часто любят задавать на собеседованиях. Предположим, у вас имеется интерфейс, его реализация и наследник этой реализации.

interface MyInterface {
    void doWork();
}

class MyBaseObject implements MyInterface {
    @Override
    public void doWork() {
        System.out.println("Base");
    }
}

class MyChildObject extends MyBaseObject {
    @Override
    public void doWork() {
        System.out.println("Child");
    }
}
Читать полностью...

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