Ranides Atterwim преди 10 години
родител
ревизия
19d00eeb89
променени са 1 файла, в които са добавени 45 реда и са изтрити 33 реда
  1. 45 33
      assira/src/main/java/net/ranides/assira/generic/EnumUtils.java

+ 45 - 33
assira/src/main/java/net/ranides/assira/generic/EnumUtils.java

@@ -1,33 +1,45 @@
-/*
- *  @author Ranides Atterwim <ranides@gmail.com>
- *  @copyright Ranides Atterwim
- *  @license WTFPL
- *  @url http://ranides.net/projects/assira
- */
-
-package net.ranides.assira.generic;
-
-import java.util.Arrays;
-import java.util.EnumMap;
-import java.util.Map;
-import java.util.function.Function;
-import java.util.function.ToIntFunction;
-import net.ranides.assira.collection.maps.IntMap;
-import net.ranides.assira.collection.maps.IntMapCollectors;
-import net.ranides.assira.collection.maps.MapCollectors;
-
-public final class EnumUtils {
-
-    private EnumUtils() {
-        // utility class
-    }
-
-    public static <K,E extends Enum<E>> Map<K, E> map(Class<E> eenum, Function<E,? extends K> function) {
-        return Arrays.stream(eenum.getEnumConstants()).collect(MapCollectors.unique(function));
-    }
-    
-    public static <E extends Enum<E>> IntMap<E> intmap(Class<E> eenum, ToIntFunction<E> function) {
-        return Arrays.stream(eenum.getEnumConstants()).collect(IntMapCollectors.unique(function));
-    }
-
-}
+/*
+ *  @author Ranides Atterwim <ranides@gmail.com>
+ *  @copyright Ranides Atterwim
+ *  @license WTFPL
+ *  @url http://ranides.net/projects/assira
+ */
+
+package net.ranides.assira.generic;
+
+import java.util.Arrays;
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.function.ToIntFunction;
+import net.ranides.assira.collection.maps.IntMap;
+import net.ranides.assira.collection.maps.IntMapCollectors;
+import net.ranides.assira.collection.maps.MapCollectors;
+
+public final class EnumUtils {
+
+    private EnumUtils() {
+        // utility class
+    }
+
+    public static <K,E extends Enum<E>> Map<K, E> map(Class<E> eenum, Function<E,? extends K> function) {
+        return Arrays.stream(eenum.getEnumConstants()).collect(MapCollectors.unique(function));
+    }
+    
+    public static <E extends Enum<E>> IntMap<E> intmap(Class<E> eenum, ToIntFunction<E> function) {
+        return Arrays.stream(eenum.getEnumConstants()).collect(IntMapCollectors.unique(function));
+    }
+    
+    public static <K,E extends Enum<E>> Map<E,K> apply(Class<E> eenum, Function<E,? extends K> function) {
+        return Arrays.stream(eenum.getEnumConstants()).collect(MapCollectors.unique(e -> e, e -> function.apply(e)));
+    }
+    
+    public static <K,E extends Enum<E>> Map<E,K> apply(Class<E> eenum, K[] values) {
+        E[] keys = eenum.getEnumConstants();
+        if(keys.length != values.length) {
+            throw new IllegalArgumentException("Different size of enum ("+keys.length+" and values array (" + values.length + ")");
+        }
+        return Arrays.stream(keys).collect(MapCollectors.unique(e -> e, e -> values[e.ordinal()]));
+    }
+
+}