trace

Details

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) {