amidst/toolbox

Filter on DataSteam class not working

rcabanasdepaz opened this issue · 1 comments

The following code:

    //Generate the data stream using the class DataSetGenerator
    DataStream<DataInstance> data = DataSetGenerator.generate(1,10,5,5);

    data.filter(d -> d.getValue(data.getAttributes().getAttributeByName("DiscreteVar0")) == 1)
        .forEach(d -> System.out.println(d));

produces this exception:

Exception in thread "main" java.lang.StackOverflowError
at eu.amidst.core.datastream.DataStream$1.stream(DataStream.java:116)
at eu.amidst.core.datastream.DataStream$1.stream(DataStream.java:116)
at eu.amidst.core.datastream.DataStream$1.stream(DataStream.java:116)
at eu.amidst.core.datastream.DataStream$1.stream(DataStream.java:116)
at eu.amidst.core.datastream.DataStream$1.stream(DataStream.java:116)
at eu.amidst.core.datastream.DataStream$1.stream(DataStream.java:116)
...

Filter returns the following object:

default DataStream filter(Predicate<? super E> predicate){
DataStream s = new DataStream() {

        @Override
        public Attributes getAttributes() {
            return this.getAttributes();
        }

        @Override
        public void close() {
            this.close();
        }

        @Override
        public boolean isRestartable() {
            return this.isRestartable();
        }

        @Override
        public void restart() {
            this.restart();
        }

        @Override
        public Stream<E> stream() {
            return this.stream().filter(predicate);
        }
    };
    return s;
}

This object is not of the same inner class. When .forEach() method is called, internally stream() is
invoked. Then it enters in a infinite loop