обработать последовательность в формате java.util.stream на python - PullRequest
0 голосов
/ 10 февраля 2019

Кто-нибудь знает, что я напишу обработку последовательности в API-интерфейсе Java-потока на Python?Идея состоит в том, чтобы записать операции в том порядке, в котором они будут выполняться:

myList.stream()
    .filter(condition)
    .map(action1)
    .map(action2)
    .collect(Collectors.toList());

Теперь в python я мог бы сделать

[action2(action1(item)) for item in my_list if condition(item)]

Но это противоположный порядок.

Как я могу иметь что-то в правильном порядке?Очевидно, я мог бы использовать переменные, но тогда мне нужно было бы найти имя для каждого частичного результата.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

В PyPI есть как минимум два модуля: медленные потоки и потоки

0 голосов
/ 10 февраля 2019

Вы можете написать это сами:

from collections import UserList


class JavaLike(UserList):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.iter = None

    def stream(self):
        self.iter = None

        return self

    def filter(self, function):
        self.iter = filter(function, self if self.iter is None else self.iter)

        return self

    def map(self, function):
        self.iter = map(function, self if self.iter is None else self.iter)

        return self

    def collect(self, collection_class=None):
        if collection_class is None:
            if self.iter is not None:
                ret = JavaLike(self.iter)
                self.iter = None

                return ret

            return JavaLike(self)

        return collection_class(self if self.iter is None else self.iter)

Тогда возможен аналогичный синтаксис:

>>> JavaLike(range(10)).stream().filter(lambda x: x % 2 == 0).map(str).collect(tuple)
('0', '2', '4', '6', '8')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...