Рубрики
Без рубрики

Потоки в Java

Всем привет. В этом году я работал над изучением большего количества Javascript, но я продолжаю работать с Java для своих… Помеченный java.

Всем привет.

В этом году я работал над изучением большего количества 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;

Optional totalOptional = 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”