JavaRush /Java блог /Random /Кофе-брейк #73. Как улучшить свой Java-код с помощью Stre...

Кофе-брейк #73. Как улучшить свой Java-код с помощью Streams. Пять лучших плагинов IntelliJ IDEA для Java-разработчиков

Статья из группы Random

Как улучшить свой Java-код с помощью Streams

Источник: Dev.toКофе-брейк #73. Улучшите свой Java-код с помощью Streams. Пять лучших плагинов IntelliJ IDEA для Java-разработчиков - 1

Что такое потоки (Streams)?

Streams впервые появились в Java 8. Согласно документации Oracle, это классы для поддержки операций функционального стиля над потоками элементов, таких как преобразования map-reduce в коллекциях. Говоря проще, поток состоит из источника данных, за которым следуют ноль или более промежуточных операций, а затем — терминальная операция.

Что такое источник данных?

  • Collections, Lists, Sets, ints, longs, doubles, массивы, строки файла.

Что такое промежуточные операции?

  • Filter, map, sort и т. д.
  • Эти операции возвращают Stream, поэтому их можно связать с другими операциями.

Что такое терминальные операции?

  • ForEach, collect, reduce, findFirst и т. д.
  • Они возвращают недействительный или непотоковый (non-stream) результат.
  • Если поток не имеет терминальной операции, промежуточные (intermediate) не будут вызываться.

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

Императивная функция (No Streams):


private int getResult_imperative(List<String> strings) {  
    int result = 0;  
    for (String string : strings){  
        if(isDigit(string.charAt(0))) continue;  
        if (string.contains("_")) continue;  
        result += string.length();  
    }  
    return result;  
}
Тут мы замечаем, что нам нужно сделать несколько вещей вручную:
  • Объявить переменную результата, чтобы отслеживать результат.
  • Перебрать потоки (Loop through the Strings).
  • Написать два оператора if (которые могут быть намного сложнее, чем этот случай).
  • Добавить к результату длину каждого.

Давайте проверим декларативный стиль (Streams):


private int getResult_Declarative(List<String> strings){  
    return strings.  
            stream().  
            filter(s -> !isDigit(s.charAt(0))).  
            filter(s -> !s.contains("_")).  
            mapToInt(String::length).  
            sum();  
}
Итак, в чем разница?
  • Мы получаем объект Stream, вызывая функцию stream().
  • (Промежуточная операция) мы применяем функцию filter дважды — каждый раз, когда мы указываем условие, которому должны соответствовать только те элементы, к которым мы хотим перейти в следующей фазе.
  • (Промежуточная операция) мы сопоставляем каждый объект String с int, вызывая метод length (используя стиль ссылки на метод).
  • (Терминальная операция) суммируем все предыдущие значения int.

Наблюдения

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

Пять лучших плагинов IntelliJ IDEA для Java-разработчиков

Источник: GitHubКофе-брейк #73. Улучшите свой Java-код с помощью Streams. Пять лучших плагинов IntelliJ IDEA для Java-разработчиков - 2Плагины могут быть очень полезны во многих ситуациях в регулярной работе с кодом. Они способны расширять основные функции, обеспечивать различные интеграции и поддерживать автоматизацию многих задач. Вот лучшие плагины по моему мнению:

SonarLint

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

Maven Helper

Надеюсь, вы используете Maven? Я да! Плагин Maven Helper обеспечивает:
  • простой способ анализа и исключения конфликтующих зависимостей;
  • простой способ поиска прямых или транзитивных зависимостей;
  • действия по запуску / отладке целей maven для модуля, содержащего текущий файл, или в корневом модуле;
  • действие для открытия терминала по текущему пути к модулю maven;
  • действия для запуска / отладки текущего тестового файла. Если maven-surefire-plugin настроен на пропуск или исключение теста, будет использоваться цель «verify». Различные стили конфигурации можно найти на GitHub.

CodeMetrics

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

String Manipulation

Переключение регистра, сортировка, фильтрация, увеличение, выравнивание по столбцам, grepping, экранирование, encoding и многое другое…

JPA Buddy

JPA Buddy упрощает и ускоряет все, что связано с JPA. Он предоставляет инструменты, которые помогут вам в работе с Hibernate, Spring Data JPA, Liquibase, Flyway. Ключевые особенности JPA Buddy:
  • Сущности JPA: создание и редактирование сущностей, атрибутов сущностей, обратных вызовов жизненного цикла, индексов и ограничений. Поддержка конвертеров JPA и пользовательских типов Hibernate. Возможность использовать аннотации Lombok для сущностей.
  • Создание правильных реализаций методов equals, hashCode и toString для сущностей JPA.
  • Намерения исходного кода, проверки и быстрые исправления для объявлений сущностей JPA.
  • Графическое отображение взаимосвязи сущностей (entity relationship) на панели структуры JPA в узле постоянных единиц.
  • Автоматическая генерация журналов изменений Liquibase и версионных миграций Flyway: сравнение базы данных с базой данных, модели с базой данных, модели с моментальным снимком.
  • Визуальный дизайнер журнала изменений Liquibase и помощь в кодировании: создание и редактирование элементов, ссылки на имена таблиц, имена столбцов, включенные файлы и другое.
  • Действия: создание снимка Liquibase, выполнение команд «Liquibase update» и «Liquibase updateSQL».
  • Репозитории данных Spring: создание репозиториев, создание методов репозитория, редактирование свойств метода, создание проекции на основе класса сущности, извлечение запроса JPQL.
  • Kotlin: все визуальные дизайнеры полностью поддерживают генерацию кода для объектов и репозиториев Kotlin.
Я сказал про пятерку лучших плагинов, но у меня есть еще один...

Extra Icons

Это коллекция иконок, которая добавляет ярлыки для таких файлов, как Markdown, Yaml, Maven, Git и многих других. Вы привыкнете к ним, так как они помогают легко распознавать файлы. Они точно вам понадобятся.
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ