Всем привет! В статье будет представлена упрощенная реализацию Stream
из Java 8 на С++. Скажу сразу, что:
- в отличии от Java не используются отложенные вычисления;
- нет параллельных версий;
- местами совмещает
Stream
иCollectors
; - используются простые и готовые решения от STL, здесь нету чистого ФП, где только рекурсия;
- не используются техники оптимизации.
В этой версии основной упор сделан на то, чтобы быстро и просто сделать велосипед). Про ФП упомянуто по-минимуму (комбинаторам внимание не уделено :)).
Интерфейс
template <typename Type>
class Stream : private StreamImpl<Type>
{
private:
typedef StreamImpl<Type> Parent;
public:
using Parent::Parent; // конструкторы унаследованы
using Parent::data;
using Parent::isEmpty;
using Parent::count;
using Parent::flatMap;
using Parent::map;
using Parent::reduce;
using Parent::filter;
using Parent::allMatch;
using Parent::noneMatch;
using Parent::groupingBy;
using Parent::partitionBy;
using Parent::minElement;
using Parent::maxElement;
~Stream() = default;
};