From 375afbd85d5143e4b6d23c65ec187e0bcee5893e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Fri, 6 Jan 2023 15:22:32 +0100 Subject: [PATCH] filter and sort in one call --- src/main/java/org/xbib/marc/MarcRecord.java | 46 ++++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) 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();