All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fluxtion.runtime.dataflow.aggregate.function.AggregateToListFlowFunction Maven / Gradle / Ivy

package com.fluxtion.runtime.dataflow.aggregate.function;

import com.fluxtion.runtime.dataflow.aggregate.AggregateFlowFunction;

import java.util.ArrayList;
import java.util.List;

public class AggregateToListFlowFunction implements AggregateFlowFunction, AggregateToListFlowFunction> {

    private transient final List list = new ArrayList<>();
    private final int maxElementCount;


    public AggregateToListFlowFunction() {
        this(-1);
    }

    public AggregateToListFlowFunction(int maxElementCount) {
        this.maxElementCount = maxElementCount;
    }

    @Override
    public List reset() {
        list.clear();
        return list;
    }

    @Override
    public void combine(AggregateToListFlowFunction add) {
        list.addAll(add.list);
        while (maxElementCount > 0 & list.size() > maxElementCount) {
            list.remove(0);
        }
    }

    @Override
    public void deduct(AggregateToListFlowFunction add) {
        list.removeAll(add.list);
    }

    @Override
    public List get() {
        return list;
    }

    @Override
    public List aggregate(T input) {
        list.add(input);
        if (maxElementCount > 0 & list.size() > maxElementCount) {
            list.remove(0);
        }
        return list;
    }


    public static class AggregateToListFactory {
        private final int maxElementCount;

        public AggregateToListFactory(int maxElementCount) {
            this.maxElementCount = maxElementCount;
        }

        public  AggregateToListFlowFunction newList() {
            return new AggregateToListFlowFunction<>(maxElementCount);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy