diff --git a/src/main/java/org/xbib/marc/MarcRecord.java b/src/main/java/org/xbib/marc/MarcRecord.java index bfc91a2..96f4186 100644 --- a/src/main/java/org/xbib/marc/MarcRecord.java +++ b/src/main/java/org/xbib/marc/MarcRecord.java @@ -19,6 +19,8 @@ import static org.xbib.marc.json.MarcJsonWriter.FORMAT_TAG; import static org.xbib.marc.json.MarcJsonWriter.LEADER_TAG; import static org.xbib.marc.json.MarcJsonWriter.TYPE_TAG; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.xbib.marc.label.RecordLabel; import java.util.Collection; @@ -159,9 +161,45 @@ public class MarcRecord implements Map { return recordLabel; } - public void filterFields(Predicate predicate) { + public void filterFields(Comparator comparator) { if (marcFields != null) { - marcFields = marcFields.stream().filter(predicate).toList(); + Stream stream = marcFields.stream(); + if (comparator != null) { + stream = stream.sorted(comparator); + } + marcFields = stream.toList(); + } + } + + public void filterFields(Predicate predicate, + Comparator comparator) { + if (marcFields != null) { + Stream stream = marcFields.stream(); + if (predicate != null) { + stream = stream.filter(predicate); + } + if (comparator != null) { + stream = stream.sorted(comparator); + } + marcFields = stream.toList(); + } + } + + public void filterFields(Predicate predicate, + Stream marcFieldStream, + Comparator comparator) { + if (marcFields != null) { + Stream stream = marcFields.stream(); + if (predicate != null) { + stream = stream.filter(predicate); + } + if (marcFieldStream != null) { + stream = Stream.concat(stream, marcFieldStream); + } + if (comparator != null) { + stream = stream.sorted(comparator); + } + marcFields = stream.toList(); } } @@ -382,10 +420,6 @@ public class MarcRecord implements Map { this.delegate = createMapFromMarcFields(Comparator.naturalOrder()); } - public void sortFields(Comparator comparator) { - this.marcFields.sort(comparator); - } - @Override public int size() { return delegate.size();