aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/internal/util
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-08-03 08:05:02 +0100
committerMichael Williamson <mike@zwobble.org>2025-08-03 08:05:02 +0100
commitb65bc063d98c2ddb1dc4cc9b4dbcdc1aef23d5aa (patch)
treeb672568a0f04e95749abdc9475f3bb026760ba64 /src/main/java/org/zwobble/mammoth/internal/util
parentdd25b828a490ddad7ccc75d762b82d5fdd689fcd (diff)
Ignore style definitions using a style ID that has already been used
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/util')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/util/Maps.java16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/util/Maps.java b/src/main/java/org/zwobble/mammoth/internal/util/Maps.java
index e053c90..72d9fd5 100644
--- a/src/main/java/org/zwobble/mammoth/internal/util/Maps.java
+++ b/src/main/java/org/zwobble/mammoth/internal/util/Maps.java
@@ -63,6 +63,22 @@ public class Maps {
return map;
}
+ /**
+ * Convert an iterable to map using the given mapping function. If the
+ * mapping function generates entries with the same key, only the first
+ * entry will be used, and subsequent entries will be ignored.
+ */
+ public static <T, K, V> Map<K, V> toMapPreferFirst(Iterable<T> iterable, Function<T, Map.Entry<K, V>> function) {
+ Map<K, V> map = new HashMap<>();
+ for (T element : iterable) {
+ Map.Entry<K, V> entry = function.apply(element);
+ if (!map.containsKey(entry.getKey())) {
+ map.put(entry.getKey(), entry.getValue());
+ }
+ }
+ return map;
+ }
+
public static <T, K> Map<K, List<T>> toMultiMapWithKey(Iterable<T> iterable, Function<T, K> function) {
return toMultiMap(iterable, element -> entry(function.apply(element), element));
}