diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java index b2145e1a..c46a1df3 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/Trace.java @@ -35,6 +35,7 @@ import java.io.*; import java.lang.ref.SoftReference; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.zip.GZIPInputStream; public class Trace { @@ -202,13 +203,14 @@ public class Trace { return; } - List workingRecords = new ArrayList<>(records); Set flagList = playerTraceShowData.getEffectiveViewFlags(); // Apply filters + Stream workingRecordsStream = records.stream(); for (ViewFlag flag : flagList) { - workingRecords = flag.filter(workingRecords); + workingRecordsStream = flag.filter(workingRecordsStream); } + List workingRecords = workingRecordsStream.collect(Collectors.toList()); // Bundle records at unique positions List> bundles = bundleRecords(workingRecords, playerTraceShowData.getBundleFilter()); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/ViewFlag.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/ViewFlag.java index d8910c4e..83ad005d 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/ViewFlag.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/ViewFlag.java @@ -31,6 +31,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * A settable flag that changes how a trace is rendered @@ -48,52 +49,44 @@ public abstract class ViewFlag { public static ViewFlag EXPLOSION = new ViewFlag(true, false, "explosion", "e") { @Override - public List filter(List records) { - return records.stream() - .filter(TNTPoint::isExplosion) - .collect(Collectors.toList()); + public Stream filter(Stream records) { + return records.filter(TNTPoint::isExplosion); } }; public static ViewFlag IGNITE = new ViewFlag(true, true, "ignite", "i") { @Override - public List filter(List records) { - return records.stream() - .filter(record -> record.isAfterFirstExplosion()) - .collect(Collectors.toList()); + public Stream filter(Stream records) { + return records.filter(record -> record.isAfterFirstExplosion()); } }; public static ViewFlag SOURCE = new ViewFlag(true, false, IGNITE, "source", "s") { @Override - public List filter(List records) { - return records.stream() - .filter(record -> record.getFuse() == 80) - .collect(Collectors.toList()); + public Stream filter(Stream records) { + return records.filter(record -> record.getFuse() == 80); } }; public static ViewFlag BUILD_DESTROY_ONLY = new ViewFlag(true, false, "build-destroy-only") { @Override - public List filter(List records) { - return records.stream() - .filter(record -> record.getHistory().get(record.getHistory().size() - 1).isDestroyedBuildArea()) - .collect(Collectors.toList()); + public Stream filter(Stream records) { + return records.filter(record -> record.getHistory().get(record.getHistory().size() - 1).isDestroyedBuildArea()); } }; public static ViewFlag TESTBLOCK_DESTROY_ONLY = new ViewFlag(true, false, "testblock-destroy-only") { @Override - public List filter(List records) { - return records.stream() - .filter(record -> record.getHistory().get(record.getHistory().size() - 1).isDestroyedTestBlock()) - .collect(Collectors.toList()); + public Stream filter(Stream records) { + return records.filter(record -> record.getHistory().get(record.getHistory().size() - 1).isDestroyedTestBlock()); } }; public static ViewFlag MICROMOTION = new ViewFlag(true, false, "micromotion", "m") { @Override - public List filter(List records) { + public Stream filter(Stream stream) { + List records = stream.collect(Collectors.toList()); + ; Set seen = new HashSet<>(); Set toRemove = new HashSet<>(); @@ -119,7 +112,7 @@ public abstract class ViewFlag { records.removeAll(record.getHistory()); } - return records; + return records.stream(); } }; @@ -239,7 +232,7 @@ public abstract class ViewFlag { * @param records Records to be filtered * @return Filtered records */ - public List filter(List records) { + public Stream filter(Stream records) { return records; } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/AtFlag.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/AtFlag.java index 5ad1157b..776eead4 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/AtFlag.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/AtFlag.java @@ -22,8 +22,7 @@ package de.steamwar.bausystem.features.tracer.rendering.dynamicflags; import de.steamwar.bausystem.features.tracer.TNTPoint; import de.steamwar.bausystem.features.tracer.rendering.ViewFlag; -import java.util.List; -import java.util.stream.Collectors; +import java.util.stream.Stream; /** * A view flag for rendering a trace only in a given time intervall @@ -56,9 +55,7 @@ public class AtFlag extends ViewFlag { } @Override - public List filter(List records) { - return records.stream() - .filter(record -> record.getTicksSinceStart() >= start && record.getTicksSinceStart() <= end) - .collect(Collectors.toList()); + public Stream filter(Stream records) { + return records.filter(record -> record.getTicksSinceStart() >= start && record.getTicksSinceStart() <= end); } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/IsolateFlag.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/IsolateFlag.java index f92d14d9..4ee99408 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/IsolateFlag.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/rendering/dynamicflags/IsolateFlag.java @@ -23,9 +23,8 @@ import de.steamwar.bausystem.features.tracer.TNTPoint; import de.steamwar.bausystem.features.tracer.rendering.ViewFlag; import java.util.HashSet; -import java.util.List; import java.util.Set; -import java.util.stream.Collectors; +import java.util.stream.Stream; /** * A flag for rendering only the records of specific tnts @@ -53,10 +52,8 @@ public class IsolateFlag extends ViewFlag { } @Override - public List filter(List records) { + public Stream filter(Stream records) { if (tntToIsolate.isEmpty()) return records; - return records.stream() - .filter(record -> tntToIsolate.contains(record.getTntId())) - .collect(Collectors.toList()); + return records.filter(record -> tntToIsolate.contains(record.getTntId())); } }