From abbcc3915fa783c648436ef52e15da923a246dd1 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 26 Mar 2016 09:27:45 +0000 Subject: Lazily combine warnings in results --- .../zwobble/mammoth/internal/docx/ReadResult.java | 32 +++++++++------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java') diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java b/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java index 8f3053d..95b886f 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java @@ -1,32 +1,26 @@ package org.zwobble.mammoth.internal.docx; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; import org.zwobble.mammoth.internal.documents.DocumentElement; import org.zwobble.mammoth.internal.results.InternalResult; import java.util.List; -import java.util.Set; import java.util.function.BiFunction; import java.util.function.Function; +import static org.zwobble.mammoth.internal.util.MammothIterables.lazyConcat; +import static org.zwobble.mammoth.internal.util.MammothIterables.lazyFlatMap; +import static org.zwobble.mammoth.internal.util.MammothLists.eagerFlatMap; import static org.zwobble.mammoth.internal.util.MammothLists.list; -import static org.zwobble.mammoth.internal.util.MammothSets.set; public class ReadResult { public static final ReadResult EMPTY_SUCCESS = success(list()); public static ReadResult concat(Iterable results) { - ImmutableList.Builder elements = ImmutableList.builder(); - ImmutableList.Builder extra = ImmutableList.builder(); - ImmutableSet.Builder warnings = ImmutableSet.builder(); - for (ReadResult result : results) { - elements.addAll(result.elements); - extra.addAll(result.extra); - warnings.addAll(result.warnings); - } - return new ReadResult(elements.build(), extra.build(), warnings.build()); + return new ReadResult( + eagerFlatMap(results, result -> result.elements), + eagerFlatMap(results, result -> result.extra), + lazyFlatMap(results, result -> result.warnings)); } public static ReadResult map( @@ -37,7 +31,7 @@ public class ReadResult { return new ReadResult( list(function.apply(first.getValue(), second.elements)), second.extra, - Sets.union(first.getWarnings(), second.warnings).immutableCopy()); + lazyConcat(first.getWarnings(), second.warnings)); } public static ReadResult success(DocumentElement element) { @@ -45,22 +39,22 @@ public class ReadResult { } public static ReadResult success(List elements) { - return new ReadResult(elements, list(), set()); + return new ReadResult(elements, list(), list()); } public static ReadResult emptyWithWarning(String warning) { - return new ReadResult(list(), list(), set(warning)); + return new ReadResult(list(), list(), list(warning)); } public static ReadResult withWarning(DocumentElement element, String warning) { - return new ReadResult(list(element), list(), set(warning)); + return new ReadResult(list(element), list(), list(warning)); } private final List elements; private final List extra; - private final Set warnings; + private final Iterable warnings; - public ReadResult(List elements, List extra, Set warnings) { + public ReadResult(List elements, List extra, Iterable warnings) { this.elements = elements; this.extra = extra; this.warnings = warnings; -- cgit v1.2.3