JavaRush /Java блог /Random UA /Кава-брейк #73. Як покращити свій Java-код за допомогою S...

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

Стаття з групи Random UA

Як покращити свій Java-код за допомогою Streams

Джерело: Dev.toКава-брейк #73.  Поліпшіть свій Java-код за допомогою Streams.  П'ять кращих плагінів IntelliJ IDEA для Java-розробників

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

Streams вперше з'явабося в Java 8. Згідно з документацією Oracle, це класи для підтримки операцій функціонального стилю над потоками елементів, таких як перетворення map-reduce в колекціях. Говорячи простіше, потік складається з джерела даних, за яким йдуть нуль або більше проміжних операцій, а потім термінальна операція.

Що таке джерело даних?

  • Колекції, Lists, Sets, ints, longs, doubles, масиви, рядки файлу.

Що таке проміжні операції?

  • Filter, map, sort тощо.
  • Ці операції повертають Stream, тому можна пов'язати з іншими операціями.

Що таке термінальні операції?

  • Длякожного, 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-розробників Плагіни можуть бути дуже корисні у багатьох ситуаціях у регулярній роботі з кодом. Вони здатні розширювати основні функції, забезпечувати різні інтеграції та підтримувати автоматизацію багатьох завдань. Ось найкращі плагіни на мою думку:

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 та багато інших. Ви звикнете до них, оскільки вони допомагають легко розпізнавати файли. Вони точно вам знадобляться.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ