Всем привет.
В этом году я работал над изучением большего количества Javascript, но я продолжаю работать с Java для своих настольных работ.
На этой неделе мне нужно было разработать небольшую функциональность, расширяющую ERP, с которой мы работаем, для экспорта текстового файла для соответствия требованиям государственного учреждения.
Чтобы сделать это и попытаться использовать более “функциональный” подход, я исследовал объект Stream.
Это новая функциональность в языке. Поток – это коллекция, которая позволяет обрабатывать данные декларативно. Например, мне нужно было выполнить суммирование по массиву элементов. В старые времена ArrayList это был мой код:
BigDecimal total = BigDecimal.ZERO; Iterator iterator = listOfValues.iterator(); while (iterator.hasNext()) { TotalSsn currentElement = iterator.next(); if (currentElement.isChildrenOf(account)) { total.add(currentElement.getImporte()); } }
С небольшой помощью объекта Stream код выглядит следующим образом:
BigDecimal total = BigDecimal.ZERO; OptionaltotalOptional = listOfValues.stream().filter(y -> y.isChildrenOf(account)).map(TotalSsn::getImporte).reduce((a, b) -> (a.add(b))); if (totalOptional.isPresent()) { total = total.get(); }
Во втором подходе я использую:
Этот метод возвращает поток. Это метод интерфейса списка, поэтому получить поток для работы с устаревшим кодом довольно просто.
Этот метод принимает функциональный интерфейс в качестве параметра и возвращает новый поток с результатами применения этой функции к элементам исходного потока.
Этот метод позволяет вам сгенерировать новый поток с другим универсальным типом. В этом случае я конвертирую свой общий Ssn в BigDecimal.
Позволяет вычислять, в данном случае, сумму значений потока.
Весь этот API, я думаю, достоин того, чтобы его изучили.
Салудос,
Оригинал: “https://dev.to/elcotu/streams-in-java-12dl”