Просмотр данных на разных этапах потока Java (или функций создания)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Просмотр данных на разных этапах потока Java (или функций создания)

Сообщение Anonymous »

Предположим, у меня есть следующие элементы:

Код: Выделить всё

class A {
String s;

String getS() {return s;}

static boolean aFilter(String in) {return true or false}

static A aTransformation(A a) {return another A}
}
Я хотел бы сделать с потоком Java следующее:

Код: Выделить всё

List myAs = provideTheList();

myAs.stream()
.map(A::getS)
.filter(A::aFilter)
.map("back to stream of A")
.map(A::aTransformation)
.toList();
Я знаю, что могу сделать это следующим образом:

Код: Выделить всё

myAs.stream()
.filter(a -> A.aFilter(a.getS()))
.map(A::aTransformation)
.toList();
Но это нарушает представление кода как серии преобразований. Я хочу избежать «a -> ...». Я мог бы написать функцию для выполнения «A.aFilter(a.getS())», но приведенный выше шаблон довольно распространен, и писать дополнительную функцию только для этого затруднительно. Что-то вроде:

Код: Выделить всё

myAs.stream()
.filter(A::aFilter ° A::getS) // function composition
...
было бы идеально, но я не знаю, сможем ли мы выразить композицию функций в Java.
В Java есть предикаты, которые можно компоновать с помощью и, или.
Я не нашел способа компоновать функции в потоке.
Другим способом было бы выполнить «возврат к потоку A", я не верю, что можно получить данные в "другой точке потока".
Есть ли у вас элегантный способ выполнить описанную выше операцию?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»