From a66fae101474e4db36b59b740e943bbb47063293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Thu, 3 Nov 2022 17:23:21 +0100 Subject: [PATCH] add subfield helpers --- gradle.properties | 2 +- src/main/java/org/xbib/marc/MarcField.java | 33 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 0231c7e..ccd605d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib name = marc -version = 2.9.2 +version = 2.9.3 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 acd20d0..7eca6b0 100644 --- a/src/main/java/org/xbib/marc/MarcField.java +++ b/src/main/java/org/xbib/marc/MarcField.java @@ -24,6 +24,8 @@ import java.util.Deque; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.function.BinaryOperator; +import java.util.function.Supplier; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -104,6 +106,37 @@ public class MarcField implements Comparable { return builder.subfields; } + /** + * Return the subfields of this MARC field as Map. Attention: this works only if there are unique subfield IDs. + * @return the subfields as map + */ + public Map getSubfieldsAsMap() { + return builder.subfields.stream().collect(Collectors.toMap(Subfield::getId, Subfield::getValue)); + } + + /** + * Return the subfields of this MARC field as Map. Attention: this works only if there are unique subfield IDs. + * @param mergeFunction the merge function + * @param supplier the supplier + * @return the subfields as map + */ + public Map getSubfieldsAsMap(BinaryOperator mergeFunction, Supplier> supplier) { + return builder.subfields.stream().collect(Collectors.toMap(Subfield::getId, Subfield::getValue, + mergeFunction, supplier)); + } + + /** + * Collect subfield values of a specified collection of subfield IDs. + * @param subfieldIds the given collection of subfield IDs + * @return the list of subfield values + */ + public List getSubfieldValues(Collection subfieldIds) { + return builder.subfields.stream() + .filter(subfield -> subfieldIds.contains(subfield.getId())) + .map(Subfield::getValue) + .collect(Collectors.toList()); + } + /** * Return all subfields of a given subfield ID. Multiple occurences may occur. * @param subfieldId subfield ID