From a203a9daeed5f9d8062ec3791253cc6794903224 Mon Sep 17 00:00:00 2001 From: Degubi Date: Sun, 8 Sep 2019 23:47:53 +0200 Subject: [PATCH] Remove a stream usage in PropertyOrdering, rework ordering strats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Gyúróczki Gergő --- .../yasson/internal/JsonbConfigProperties.java | 5 ++--- .../model/customization/PropertyOrdering.java | 12 +++++++----- .../model/customization/StrategiesProvider.java | 15 +++++---------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/eclipse/yasson/internal/JsonbConfigProperties.java b/src/main/java/org/eclipse/yasson/internal/JsonbConfigProperties.java index bff037e4b..6f97208af 100644 --- a/src/main/java/org/eclipse/yasson/internal/JsonbConfigProperties.java +++ b/src/main/java/org/eclipse/yasson/internal/JsonbConfigProperties.java @@ -35,7 +35,6 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.temporal.ChronoField; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -43,7 +42,7 @@ import java.util.Map; import java.util.Optional; import java.util.TreeMap; -import java.util.function.Function; +import java.util.function.Consumer; /** * Resolved properties from JSONB config. @@ -156,7 +155,7 @@ private String getGlobalConfigJsonbDateFormat() { }).orElse(JsonbDateFormat.DEFAULT_FORMAT); } - private Function, List> initOrderStrategy() { + private Consumer> initOrderStrategy() { Optional strategy = getPropertyOrderStrategy(); return strategy.map(StrategiesProvider::getOrderingFunction) diff --git a/src/main/java/org/eclipse/yasson/internal/model/customization/PropertyOrdering.java b/src/main/java/org/eclipse/yasson/internal/model/customization/PropertyOrdering.java index 9354f0fa9..c70ae5f41 100644 --- a/src/main/java/org/eclipse/yasson/internal/model/customization/PropertyOrdering.java +++ b/src/main/java/org/eclipse/yasson/internal/model/customization/PropertyOrdering.java @@ -28,14 +28,14 @@ */ public class PropertyOrdering { - private final Function, List> propertyOrderStrategy; + private final Consumer> propertyOrderStrategy; /** * Creates a new instance. * * @param propertyOrderStrategy Property order strategy. Must be not null. */ - public PropertyOrdering(Function, List> propertyOrderStrategy) { + public PropertyOrdering(Consumer> propertyOrderStrategy) { this.propertyOrderStrategy = Objects.requireNonNull(propertyOrderStrategy); } @@ -49,7 +49,7 @@ public PropertyOrdering(Function, List> */ public List orderProperties(List properties, ClassModel classModel) { Map byReadName = new HashMap<>(); - properties.stream().forEach(propertyModel -> byReadName.put(propertyModel.getPropertyName(), propertyModel)); + properties.forEach(propertyModel -> byReadName.put(propertyModel.getPropertyName(), propertyModel)); String[] order = classModel.getClassCustomization().getPropertyOrder(); List sortedProperties = new ArrayList<>(); @@ -63,7 +63,9 @@ public List orderProperties(List properties, Class } } - sortedProperties.addAll(propertyOrderStrategy.apply(byReadName.values())); + List readNamesToSort = new ArrayList<>(byReadName.values()); + propertyOrderStrategy.accept(readNamesToSort); + sortedProperties.addAll(readNamesToSort); return sortedProperties; } -} +} \ No newline at end of file diff --git a/src/main/java/org/eclipse/yasson/internal/model/customization/StrategiesProvider.java b/src/main/java/org/eclipse/yasson/internal/model/customization/StrategiesProvider.java index 1a2180e12..955839b21 100644 --- a/src/main/java/org/eclipse/yasson/internal/model/customization/StrategiesProvider.java +++ b/src/main/java/org/eclipse/yasson/internal/model/customization/StrategiesProvider.java @@ -12,7 +12,6 @@ ******************************************************************************/ package org.eclipse.yasson.internal.model.customization; -import static java.util.stream.Collectors.toList; import static java.util.Comparator.comparing; import static javax.json.bind.config.PropertyNamingStrategy.*; import static javax.json.bind.config.PropertyOrderStrategy.*; @@ -24,7 +23,7 @@ import org.eclipse.yasson.internal.properties.MessageKeys; import java.nio.CharBuffer; -import java.util.function.Function; +import java.util.function.Consumer; import java.util.*; public final class StrategiesProvider { @@ -32,14 +31,14 @@ private StrategiesProvider() {} public static final PropertyNamingStrategy CASE_INSENSITIVE_STRATEGY = Objects::requireNonNull; - public static Function, List> getOrderingFunction(String strategy){ + public static Consumer> getOrderingFunction(String strategy){ switch(strategy) { case LEXICOGRAPHICAL: - return createSortingOrdererFunction(comparing(PropertyModel::getWriteName)); + return props -> props.sort(comparing(PropertyModel::getWriteName)); case ANY: - return ArrayList::new; + return props -> {}; case REVERSE: - return createSortingOrdererFunction(comparing(PropertyModel::getWriteName).reversed()); + return props -> props.sort(comparing(PropertyModel::getWriteName).reversed()); default: throw new JsonbException(Messages.getMessage(MessageKeys.PROPERTY_ORDER, strategy)); } @@ -65,10 +64,6 @@ public static PropertyNamingStrategy getPropertyNamingStrategy(String strategy) } - private static Function, List> createSortingOrdererFunction(Comparator comparator){ - return props -> props.stream().sorted(comparator).collect(toList()); - } - private static PropertyNamingStrategy createUpperCamelCaseStrategy() { return propertyName -> { Objects.requireNonNull(propertyName);