From 22646254b1a34754ab5d27c10ea946a72b2936ab Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Wed, 11 Dec 2019 23:54:26 +0000 Subject: [PATCH] added TreeMap to CollectionUtils and enum utilities to JWO --- .../net/woggioni/jwo/CollectionUtils.java | 21 +++++++++++++++++-- src/main/java/net/woggioni/jwo/JWO.java | 13 ++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/woggioni/jwo/CollectionUtils.java b/src/main/java/net/woggioni/jwo/CollectionUtils.java index 5627471..7eee038 100644 --- a/src/main/java/net/woggioni/jwo/CollectionUtils.java +++ b/src/main/java/net/woggioni/jwo/CollectionUtils.java @@ -10,10 +10,12 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import java.util.TreeSet; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collector; import java.util.stream.Stream; @@ -124,12 +126,27 @@ public class CollectionUtils { }; } - public static Collector> toUnmodifiableMap(Function keyExtractor, Function valueExtractor) { + public static Collector> toUnmodifiableHashMap( + Function keyExtractor, + Function valueExtractor) { + return toUnmodifiableMap(HashMap::new, keyExtractor, valueExtractor); + } + + public static Collector> toUnmodifiableTreeMap( + Function keyExtractor, + Function valueExtractor) { + return toUnmodifiableMap(TreeMap::new, keyExtractor, valueExtractor); + } + + public static Collector> toUnmodifiableMap( + Supplier> constructor, + Function keyExtractor, + Function valueExtractor) { BiConsumer, T> accumulator = (map, streamElement) -> { map.merge(keyExtractor.apply(streamElement), valueExtractor.apply(streamElement), throwingMerger()); }; return Collector.of( - HashMap::new, + constructor, accumulator, mapMerger(throwingMerger()), Collections::unmodifiableMap diff --git a/src/main/java/net/woggioni/jwo/JWO.java b/src/main/java/net/woggioni/jwo/JWO.java index 34dd6f2..b52b9f9 100644 --- a/src/main/java/net/woggioni/jwo/JWO.java +++ b/src/main/java/net/woggioni/jwo/JWO.java @@ -338,4 +338,17 @@ public class JWO { return Optional.empty(); } } + + public static Map enumReverseMap(Class cls) { + return Arrays.stream(cls.getEnumConstants()) + .collect(CollectionUtils.toUnmodifiableTreeMap(Object::toString, Function.identity())); + } + + public static T enumFromString(Class cls, Map reverseMap, String value) { + T result = reverseMap.get(value); + if (result == null) + throw newThrowable(IllegalArgumentException.class, + "Unknown value '%s' for enum %s", value, cls.getName()); + return result; + } }