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