Использование Intellij IDEA для решения проблем с потоками данных в Java 8
Java 8 была выпущена в марте 2014 года, и с тех пор прошло почти год. Мы планируем обновить все наши производственные серверы до этой новой версии. С этого момента мы перенесём большую часть нашего кодового хранилища на лямбда-выражения, потоки данных и новый API дат. Мы также будем использовать Nashorn для преобразования динамических сценариев в нашем приложении.
Помимо лямбд, наиболее полезной функцией является новый API потоков данных. Операции над коллекциями можно найти повсюду в любом коде, который я видел. И для этих операций потоки данных являются отличным способом улучшить читаемость кода.
Однако есть одна вещь, которая меня беспокоит: потоки данных предоставляют только несколько конечных операций, таких как reduce и findFirst, которые являются прямыми операциями, а остальные доступны только через collect. Класс инструментов Collectors предоставляет несколько удобных сборщиков, таких как toList, toSet, joining и groupingBy.
Например, следующий код фильтрует коллекцию строк и создаёт новый список:
stringCollection
.stream()
.filter(e -> e.startsWith("a"))
.collect(Collectors.toList());
После переноса 300 тысяч строк кода в потоки данных я могу сказать, что toList, toSet и groupingBy являются наиболее часто используемыми конечными операциями в вашем проекте. Поэтому я не понимаю, почему эти методы не были интегрированы непосредственно в интерфейс Stream, чтобы вы могли напрямую написать:
stringCollection
.stream()
.filter(e -> e.startsWith("a"))
.toList();
Это может показаться незначительным недостатком, но если вам приходится писать этот код снова и снова, это может быть очень раздражающим.
Существует метод toArray(), но нет toList(), поэтому я действительно надеюсь, что некоторые удобные сборщики будут добавлены к интерфейсу Stream в Java 9. Верно, Брайан?
В любом случае, IntelliJ IDEA утверждает, что это самый умный Java IDE. Давайте посмотрим, как использовать IDEA, чтобы решить эту проблему.
Использование IntelliJ IDEA для помощи
IntelliJ IDEA поставляется с удобной функцией под названием Live Template. Если вы ещё не знаете, что такое Live Template, это просто быстрый способ ввода часто используемых фрагментов кода. Например, если вы введёте sout и нажмёте TAB, IDEA вставит фрагмент кода System.out.println(). Для получения дополнительной информации см. здесь.
Как использовать Live Template для решения вышеуказанной проблемы? На самом деле нам нужно создать собственные Live Templates для всех широко используемых сборщиков по умолчанию для потоков данных. Например, мы можем создать Live Template для .toList, который автоматически вставляет соответствующий сборщик .collect(Collectors.toList()).
Вот как это работает на практике:
Создание собственного Live Template
Давайте посмотрим, как его создать. Сначала перейдите в настройки (Settings) и выберите Live Template в меню слева. Вы также можете использовать удобный фильтр в левом верхнем углу диалогового окна.
Затем мы можем добавить новую группу, называемую Stream, с помощью значка + справа. Затем мы добавляем все Live Templates, связанные с потоками данных, в группу. Я часто использую сборщики по умолчанию toList, toSet, groupingBy и join, поэтому я создал новый Live Template для каждого из этих методов.
Этот шаг очень важен. После добавления нового Live Template вам необходимо указать соответствующий контекст в нижней части диалогового окна. Вам нужно выбрать Java → Other, а затем определить аббревиатуру, описание и фактический код шаблона.
// Abbreviation: .toList
.collect(Collectors.toList())
// Abbreviation: .toSet
.collect(Collectors.toSet())
// Abbreviation: .join
.collect(Collectors.joining("$END$"))
// Abbreviation: .groupBy
.collect(Collectors.groupingBy(e -> $END$))
Специальная переменная $END$ указывает позицию курсора после использования шаблона, так что вы можете сразу же ввести текст в этом месте, например, определить разделитель соединения.
Совет: Вы должны включить опцию «Add unambiguous imports on the fly» (автоматически добавлять явные операторы импорта), чтобы IDEA автоматически добавляла оператор импорта java.util.stream.Collectors. Опция находится в разделе Editor → General → Auto Import.
Давайте рассмотрим эти два шаблона в действии:
Live Templates в IntelliJ IDEA очень гибкие и мощные. Вы можете значительно повысить свою продуктивность с их помощью. Знаете ли вы о других примерах того, как Live Templates могут спасти жизнь? Дайте мне знать!
Всё ещё недовольны? Изучите всё, что хотите узнать о потоках данных, в моём руководстве по потокам данных.
Счастливого программирования!
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )