diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/reader/TraceReader.java b/src/main/java/br/ufrgs/inf/prosoft/trace/reader/TraceReader.java
index a700518..1c223db 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/reader/TraceReader.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/reader/TraceReader.java
@@ -20,6 +20,7 @@ import java.nio.file.Paths;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;
import java.util.logging.Level;
@@ -71,16 +72,34 @@ public class TraceReader {
}
}
- public static List<Trace> parseFile(String path, Mode mode, long window, long shift) {
+ public static List<Trace> parseFile(String path, Mode mode, Long window, Long shift) {
List<Trace> traces = parseFile(path, mode);
+ if (window == null) {
+ return traces;
+ }
+ if (shift == null) {
+ shift = 0L;
+ }
Trace first = traces.get(0);
long startTime = first.getStartTime();
- return traces.stream()
- .filter(trace -> {
- long time = trace.getStartTime() - startTime;
- return time > shift && time < window;
- })
- .collect(Collectors.toList());
+ for (Iterator<Trace> iterator = traces.iterator(); iterator.hasNext();) {
+ Trace trace = iterator.next();
+ long time = trace.getStartTime() - startTime;
+ if (time < shift) {
+ iterator.remove();
+ } else {
+ startTime = trace.getStartTime();
+ break;
+ }
+ }
+ for (Iterator<Trace> iterator = traces.iterator(); iterator.hasNext();) {
+ Trace trace = iterator.next();
+ long time = trace.getStartTime() - startTime;
+ if (time > window) {
+ iterator.remove();
+ }
+ }
+ return traces;
}
public static List<Trace> parseFile(String path, Mode mode) {