diff --git a/pom.xml b/pom.xml
index 1f8dcee..e74ea67 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
fi.solita.utils
functional-utils
- 0.12.52
+ 0.12.53
diff --git a/src/main/java/fi/solita/utils/functional/Apply40.java b/src/main/java/fi/solita/utils/functional/Apply40.java
new file mode 100644
index 0000000..f4a202d
--- /dev/null
+++ b/src/main/java/fi/solita/utils/functional/Apply40.java
@@ -0,0 +1,10 @@
+package fi.solita.utils.functional;
+
+import java.io.Serializable;
+
+/**
+ * java.util.function.Function but for 40 arguments
+ */
+public interface Apply40 extends Serializable {
+ R apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20, T21 t21, T22 t22, T23 t23, T24 t24, T25 t25, T26 t26, T27 t27, T28 t28, T29 t29, T30 t30, T31 t31, T32 t32, T33 t33, T34 t34, T35 t35, T36 t36, T37 t37, T38 t38, T39 t39, T40 t40);
+}
diff --git a/src/main/java/fi/solita/utils/functional/Collections.java b/src/main/java/fi/solita/utils/functional/Collections.java
index ac058f0..5d1dc1a 100644
--- a/src/main/java/fi/solita/utils/functional/Collections.java
+++ b/src/main/java/fi/solita/utils/functional/Collections.java
@@ -541,10 +541,17 @@ public static final List newList(T e1, T e2, T e3, T e4, T e5, T e6, T e7
}
/**
- * @return some implementation of a list containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37}, {@code e38}, {@code e39} and {@code elements}.
+ * @return some implementation of a list containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37}, {@code e38} and {@code e39}.
*/
- public static final List newList(T e1, T e2, T e3, T e4, T e5, T e6, T e7, T e8, T e9, T e10, T e11, T e12, T e13, T e14, T e15, T e16, T e17, T e18, T e19, T e20, T e21, T e22, T e23, T e24, T e25, T e26, T e27, T e28, T e29, T e30, T e31, T e32, T e33, T e34, T e35, T e36, T e37, T e38, T e39, T... elements) {
- return newList(concat(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39), elements));
+ public static final List newList(T e1, T e2, T e3, T e4, T e5, T e6, T e7, T e8, T e9, T e10, T e11, T e12, T e13, T e14, T e15, T e16, T e17, T e18, T e19, T e20, T e21, T e22, T e23, T e24, T e25, T e26, T e27, T e28, T e29, T e30, T e31, T e32, T e33, T e34, T e35, T e36, T e37, T e38, T e39) {
+ return java.util.Collections.unmodifiableList(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39));
+ }
+
+ /**
+ * @return some implementation of a list containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37}, {@code e38}, {@code e39}, {@code e40} and {@code elements}.
+ */
+ public static final List newList(T e1, T e2, T e3, T e4, T e5, T e6, T e7, T e8, T e9, T e10, T e11, T e12, T e13, T e14, T e15, T e16, T e17, T e18, T e19, T e20, T e21, T e22, T e23, T e24, T e25, T e26, T e27, T e28, T e29, T e30, T e31, T e32, T e33, T e34, T e35, T e36, T e37, T e38, T e39, T e40, T... elements) {
+ return newList(concat(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40), elements));
}
/**
@@ -880,14 +887,21 @@ public static final Set newSet(T e1, T e2, T e3, T e4, T e5, T e6, T e7,
* @return some implementation of a set containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37} and {@code e38}.
*/
public static final Set newSet(T e1, T e2, T e3, T e4, T e5, T e6, T e7, T e8, T e9, T e10, T e11, T e12, T e13, T e14, T e15, T e16, T e17, T e18, T e19, T e20, T e21, T e22, T e23, T e24, T e25, T e26, T e27, T e28, T e29, T e30, T e31, T e32, T e33, T e34, T e35, T e36, T e37, T e38) {
- return newSet(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37));
+ return newSet(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38));
}
/**
- * @return some implementation of a set containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37}, {@code e38}, {@code e39} and {@code elements}.
+ * @return some implementation of a set containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37}, {@code e38} and {@code e39}.
*/
- public static final Set newSet(T e1, T e2, T e3, T e4, T e5, T e6, T e7, T e8, T e9, T e10, T e11, T e12, T e13, T e14, T e15, T e16, T e17, T e18, T e19, T e20, T e21, T e22, T e23, T e24, T e25, T e26, T e27, T e28, T e29, T e30, T e31, T e32, T e33, T e34, T e35, T e36, T e37, T e38, T e39, T... elements) {
- return newSet(concat(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39), elements));
+ public static final Set newSet(T e1, T e2, T e3, T e4, T e5, T e6, T e7, T e8, T e9, T e10, T e11, T e12, T e13, T e14, T e15, T e16, T e17, T e18, T e19, T e20, T e21, T e22, T e23, T e24, T e25, T e26, T e27, T e28, T e29, T e30, T e31, T e32, T e33, T e34, T e35, T e36, T e37, T e38, T e39) {
+ return newSet(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39));
+ }
+
+ /**
+ * @return some implementation of a set containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37}, {@code e38}, {@code e39}, {@code e40} and {@code elements}.
+ */
+ public static final Set newSet(T e1, T e2, T e3, T e4, T e5, T e6, T e7, T e8, T e9, T e10, T e11, T e12, T e13, T e14, T e15, T e16, T e17, T e18, T e19, T e20, T e21, T e22, T e23, T e24, T e25, T e26, T e27, T e28, T e29, T e30, T e31, T e32, T e33, T e34, T e35, T e36, T e37, T e38, T e39, T e40, T... elements) {
+ return newSet(concat(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40), elements));
}
private static final Class> unmodifiableListClass = java.util.Collections.unmodifiableList(emptyList()).getClass();
@@ -1469,10 +1483,19 @@ public static final Map newMap(Map.Entry extends K, ? extends V>
/**
* Unsafe! Fails if given duplicate keys.
*
- * @return some implementation of a Map containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37}, {@code e38}, {@code e39} and {@code elements}.
+ * @return some implementation of a Map containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37}, {@code e38} and {@code e39}.
+ */
+ public static final Map newMap(Map.Entry extends K, ? extends V> e1, Map.Entry extends K, ? extends V> e2, Map.Entry extends K, ? extends V> e3, Map.Entry extends K, ? extends V> e4, Map.Entry extends K, ? extends V> e5, Map.Entry extends K, ? extends V> e6, Map.Entry extends K, ? extends V> e7, Map.Entry extends K, ? extends V> e8, Map.Entry extends K, ? extends V> e9, Map.Entry extends K, ? extends V> e10, Map.Entry extends K, ? extends V> e11, Map.Entry extends K, ? extends V> e12, Map.Entry extends K, ? extends V> e13, Map.Entry extends K, ? extends V> e14, Map.Entry extends K, ? extends V> e15, Map.Entry extends K, ? extends V> e16, Map.Entry extends K, ? extends V> e17, Map.Entry extends K, ? extends V> e18, Map.Entry extends K, ? extends V> e19, Map.Entry extends K, ? extends V> e20, Map.Entry extends K, ? extends V> e21, Map.Entry extends K, ? extends V> e22, Map.Entry extends K, ? extends V> e23, Map.Entry extends K, ? extends V> e24, Map.Entry extends K, ? extends V> e25, Map.Entry extends K, ? extends V> e26, Map.Entry extends K, ? extends V> e27, Map.Entry extends K, ? extends V> e28, Map.Entry extends K, ? extends V> e29, Map.Entry extends K, ? extends V> e30, Map.Entry extends K, ? extends V> e31, Map.Entry extends K, ? extends V> e32, Map.Entry extends K, ? extends V> e33, Map.Entry extends K, ? extends V> e34, Map.Entry extends K, ? extends V> e35, Map.Entry extends K, ? extends V> e36, Map.Entry extends K, ? extends V> e37, Map.Entry extends K, ? extends V> e38, Map.Entry extends K, ? extends V> e39) {
+ return newMap(SemiGroups.fail(), Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39));
+ }
+
+ /**
+ * Unsafe! Fails if given duplicate keys.
+ *
+ * @return some implementation of a Map containing elements {@code e1}, {@code e2}, {@code e3}, {@code e4}, {@code e5}, {@code e6}, {@code e7}, {@code e8}, {@code e9}, {@code e10}, {@code e11}, {@code e12}, {@code e13}, {@code e14}, {@code e15}, {@code e16}, {@code e17}, {@code e18}, {@code e19}, {@code e20}, {@code e21}, {@code e22}, {@code e23}, {@code e24}, {@code e25}, {@code e26}, {@code e27}, {@code e28}, {@code e29}, {@code e30}, {@code e31}, {@code e32}, {@code e33}, {@code e34}, {@code e35}, {@code e36}, {@code e37}, {@code e38}, {@code e39}, {@code e40} and {@code elements}.
*/
- public static final Map newMap(Map.Entry extends K, ? extends V> e1, Map.Entry extends K, ? extends V> e2, Map.Entry extends K, ? extends V> e3, Map.Entry extends K, ? extends V> e4, Map.Entry extends K, ? extends V> e5, Map.Entry extends K, ? extends V> e6, Map.Entry extends K, ? extends V> e7, Map.Entry extends K, ? extends V> e8, Map.Entry extends K, ? extends V> e9, Map.Entry extends K, ? extends V> e10, Map.Entry extends K, ? extends V> e11, Map.Entry extends K, ? extends V> e12, Map.Entry extends K, ? extends V> e13, Map.Entry extends K, ? extends V> e14, Map.Entry extends K, ? extends V> e15, Map.Entry extends K, ? extends V> e16, Map.Entry extends K, ? extends V> e17, Map.Entry extends K, ? extends V> e18, Map.Entry extends K, ? extends V> e19, Map.Entry extends K, ? extends V> e20, Map.Entry extends K, ? extends V> e21, Map.Entry extends K, ? extends V> e22, Map.Entry extends K, ? extends V> e23, Map.Entry extends K, ? extends V> e24, Map.Entry extends K, ? extends V> e25, Map.Entry extends K, ? extends V> e26, Map.Entry extends K, ? extends V> e27, Map.Entry extends K, ? extends V> e28, Map.Entry extends K, ? extends V> e29, Map.Entry extends K, ? extends V> e30, Map.Entry extends K, ? extends V> e31, Map.Entry extends K, ? extends V> e32, Map.Entry extends K, ? extends V> e33, Map.Entry extends K, ? extends V> e34, Map.Entry extends K, ? extends V> e35, Map.Entry extends K, ? extends V> e36, Map.Entry extends K, ? extends V> e37, Map.Entry extends K, ? extends V> e38, Map.Entry extends K, ? extends V> e39, Map.Entry extends K, ? extends V>... elements) {
- return newMap(SemiGroups.fail(), concat(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39), elements));
+ public static final Map newMap(Map.Entry extends K, ? extends V> e1, Map.Entry extends K, ? extends V> e2, Map.Entry extends K, ? extends V> e3, Map.Entry extends K, ? extends V> e4, Map.Entry extends K, ? extends V> e5, Map.Entry extends K, ? extends V> e6, Map.Entry extends K, ? extends V> e7, Map.Entry extends K, ? extends V> e8, Map.Entry extends K, ? extends V> e9, Map.Entry extends K, ? extends V> e10, Map.Entry extends K, ? extends V> e11, Map.Entry extends K, ? extends V> e12, Map.Entry extends K, ? extends V> e13, Map.Entry extends K, ? extends V> e14, Map.Entry extends K, ? extends V> e15, Map.Entry extends K, ? extends V> e16, Map.Entry extends K, ? extends V> e17, Map.Entry extends K, ? extends V> e18, Map.Entry extends K, ? extends V> e19, Map.Entry extends K, ? extends V> e20, Map.Entry extends K, ? extends V> e21, Map.Entry extends K, ? extends V> e22, Map.Entry extends K, ? extends V> e23, Map.Entry extends K, ? extends V> e24, Map.Entry extends K, ? extends V> e25, Map.Entry extends K, ? extends V> e26, Map.Entry extends K, ? extends V> e27, Map.Entry extends K, ? extends V> e28, Map.Entry extends K, ? extends V> e29, Map.Entry extends K, ? extends V> e30, Map.Entry extends K, ? extends V> e31, Map.Entry extends K, ? extends V> e32, Map.Entry extends K, ? extends V> e33, Map.Entry extends K, ? extends V> e34, Map.Entry extends K, ? extends V> e35, Map.Entry extends K, ? extends V> e36, Map.Entry extends K, ? extends V> e37, Map.Entry extends K, ? extends V> e38, Map.Entry extends K, ? extends V> e39, Map.Entry extends K, ? extends V> e40, Map.Entry extends K, ? extends V>... elements) {
+ return newMap(SemiGroups.fail(), concat(Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40), elements));
}
/**
diff --git a/src/main/java/fi/solita/utils/functional/Compare.java b/src/main/java/fi/solita/utils/functional/Compare.java
index 084d453..20b29ef 100644
--- a/src/main/java/fi/solita/utils/functional/Compare.java
+++ b/src/main/java/fi/solita/utils/functional/Compare.java
@@ -394,4 +394,10 @@ public static final > Ordering>
*/
@SuppressWarnings("unchecked")
public static final Ordering>> by_39 = (Ordering>>)(Object)by(Transformers.>_39());
+
+ /**
+ * Ordering for 40. element of a tuple.
+ */
+ @SuppressWarnings("unchecked")
+ public static final Ordering>> by_40 = (Ordering>>)(Object)by(Transformers.>_40());
}
diff --git a/src/main/java/fi/solita/utils/functional/Function.java b/src/main/java/fi/solita/utils/functional/Function.java
index e720537..c851bd3 100644
--- a/src/main/java/fi/solita/utils/functional/Function.java
+++ b/src/main/java/fi/solita/utils/functional/Function.java
@@ -394,6 +394,15 @@ public final R apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9
};
}
+ public static final Function40 of(final Apply40 apply) {
+ return new Function40() {
+ @Override
+ public final R apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10, T11 t11, T12 t12, T13 t13, T14 t14, T15 t15, T16 t16, T17 t17, T18 t18, T19 t19, T20 t20, T21 t21, T22 t22, T23 t23, T24 t24, T25 t25, T26 t26, T27 t27, T28 t28, T29 t29, T30 t30, T31 t31, T32 t32, T33 t33, T34 t34, T35 t35, T36 t36, T37 t37, T38 t38, T39 t39, T40 t40) {
+ return apply.apply(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20, t21, t22, t23, t24, t25, t26, t27, t28, t29, t30, t31, t32, t33, t34, t35, t36, t37, t38, t39, t40);
+ }
+ };
+ }
+
public static final Function2 consumer(final ApplyBiVoid apply) {
return new Function2() {
@Override
@@ -967,6 +976,12 @@ public final R apply(Object p1, Object p2, Object p3, Object p4, Object p5, Obje
return ff.apply(replacePlaceholders(args, t, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39));
}
};
+ case 40: return (FR) new Function40