diff --git a/gradle.properties b/gradle.properties index 08a8ffe..26a7e75 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib name = marc -version = 2.10.0 +version = 2.11.0 org.gradle.warning.mode = ALL diff --git a/src/main/java/org/xbib/marc/MarcField.java b/src/main/java/org/xbib/marc/MarcField.java index 2ae95b5..4eef14d 100644 --- a/src/main/java/org/xbib/marc/MarcField.java +++ b/src/main/java/org/xbib/marc/MarcField.java @@ -24,6 +24,7 @@ import java.util.Deque; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.BinaryOperator; import java.util.function.Supplier; import java.util.regex.Pattern; @@ -602,6 +603,20 @@ public class MarcField implements Comparable { return this; } + /** + * Remove subfields if they match the given set of subfield IDs. + * @param subfieldIds the IDs to remove + * @return this builder + */ + public Builder removeSubfields(Set subfieldIds) { + LinkedList list = subfields.stream() + .filter(sf -> !subfieldIds.contains(sf.id)) + .collect(Collectors.toCollection(LinkedList::new)); + this.subfields.clear(); + this.subfields.addAll(list); + return this; + } + /** * Copy a MARC field into this builder. * @param field the MARC field to copy @@ -793,6 +808,16 @@ public class MarcField implements Comparable { return value; } + @Override + public boolean equals(Object obj) { + return obj instanceof Subfield && toString().equals(obj.toString()); + } + + @Override + public int hashCode() { + return toString().hashCode(); + } + @Override public String toString() { return id + "=" + value;