--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.util/src/org/graalvm/util/CollectionsUtil.java Fri Feb 02 10:37:48 2018 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.util/src/org/graalvm/util/CollectionsUtil.java Fri Feb 02 17:28:17 2018 -0800
@@ -37,7 +37,10 @@
/**
* This class contains utility methods for commonly used functional patterns for collections.
*/
-public class CollectionsUtil {
+public final class CollectionsUtil {
+
+ private CollectionsUtil() {
+ }
/**
* Concatenates two iterables into a single iterable. The iterator exposed by the returned
@@ -93,10 +96,26 @@
};
}
+ /**
+ * Returns whether all elements in {@code inputs} match {@code predicate}. May not evaluate
+ * {@code predicate} on all elements if not necessary for determining the result. If
+ * {@code inputs} is empty then {@code true} is returned and {@code predicate} is not evaluated.
+ *
+ * @return {@code true} if either all elements in {@code inputs} match {@code predicate} or
+ * {@code inputs} is empty, otherwise {@code false}.
+ */
public static <T> boolean allMatch(T[] inputs, Predicate<T> predicate) {
return allMatch(Arrays.asList(inputs), predicate);
}
+ /**
+ * Returns whether all elements in {@code inputs} match {@code predicate}. May not evaluate
+ * {@code predicate} on all elements if not necessary for determining the result. If
+ * {@code inputs} is empty then {@code true} is returned and {@code predicate} is not evaluated.
+ *
+ * @return {@code true} if either all elements in {@code inputs} match {@code predicate} or
+ * {@code inputs} is empty, otherwise {@code false}.
+ */
public static <T> boolean allMatch(Iterable<T> inputs, Predicate<T> predicate) {
for (T t : inputs) {
if (!predicate.test(t)) {
@@ -106,10 +125,28 @@
return true;
}
+ /**
+ * Returns whether any elements in {@code inputs} match {@code predicate}. May not evaluate
+ * {@code predicate} on all elements if not necessary for determining the result. If
+ * {@code inputs} is empty then {@code false} is returned and {@code predicate} is not
+ * evaluated.
+ *
+ * @return {@code true} if any elements in {@code inputs} match {@code predicate}, otherwise
+ * {@code false}.
+ */
public static <T> boolean anyMatch(T[] inputs, Predicate<T> predicate) {
return anyMatch(Arrays.asList(inputs), predicate);
}
+ /**
+ * Returns whether any elements in {@code inputs} match {@code predicate}. May not evaluate
+ * {@code predicate} on all elements if not necessary for determining the result. If
+ * {@code inputs} is empty then {@code false} is returned and {@code predicate} is not
+ * evaluated.
+ *
+ * @return {@code true} if any elements in {@code inputs} match {@code predicate}, otherwise
+ * {@code false}.
+ */
public static <T> boolean anyMatch(Iterable<T> inputs, Predicate<T> predicate) {
for (T t : inputs) {
if (predicate.test(t)) {
@@ -119,10 +156,21 @@
return false;
}
+ /**
+ * Returns a new list consisting of the elements in {@code inputs} that match {@code predicate}.
+ *
+ * @return the new list.
+ */
public static <T> List<T> filterToList(List<T> inputs, Predicate<? super T> predicate) {
return filterToList(inputs, predicate, ArrayList::new);
}
+ /**
+ * Appends elements of {@code inputs} that match {@code predicate} to the list generated by
+ * {@code listGenerator}.
+ *
+ * @return the list generated by {@code listGenerator}.
+ */
public static <T> List<T> filterToList(List<T> inputs, Predicate<? super T> predicate, Supplier<List<T>> listGenerator) {
List<T> resultList = listGenerator.get();
for (T t : inputs) {
@@ -134,8 +182,10 @@
}
/**
- * Filters the inputs, maps them given the mapping function and adds them in the array provided
- * by the generator.
+ * Filters {@code inputs} with {@code predicate}, applies {@code mapper} and adds them in the
+ * array provided by {@code arrayGenerator}.
+ *
+ * @return the array provided by {@code arrayGenerator}.
*/
public static <T, R> R[] filterAndMapToArray(T[] inputs, Predicate<? super T> predicate, Function<? super T, ? extends R> mapper, IntFunction<R[]> arrayGenerator) {
List<R> resultList = new ArrayList<>();
@@ -148,13 +198,21 @@
}
/**
- * Maps the inputs given the mapping function and adds them in the array provided by the
- * generator.
+ * Applies {@code mapper} on the elements in {@code inputs} and adds them in the array provided
+ * by {@code arrayGenerator}.
+ *
+ * @return the array provided by {@code arrayGenerator}.
*/
public static <T, R> R[] mapToArray(T[] inputs, Function<? super T, ? extends R> mapper, IntFunction<R[]> arrayGenerator) {
return mapToArray(Arrays.asList(inputs), mapper, arrayGenerator);
}
+ /**
+ * Applies {@code mapper} on the elements in {@code inputs} and adds them in the array provided
+ * by {@code arrayGenerator}.
+ *
+ * @return the array provided by {@code arrayGenerator}.
+ */
public static <T, R> R[] mapToArray(Collection<T> inputs, Function<? super T, ? extends R> mapper, IntFunction<R[]> arrayGenerator) {
R[] result = arrayGenerator.apply(inputs.size());
int idx = 0;
@@ -164,26 +222,62 @@
return result;
}
+ /**
+ * Applies {@code mapper} on the elements in {@code inputs}, and joins them together separated
+ * by {@code delimiter}.
+ *
+ * @return a new String that is composed from {@code inputs}.
+ */
public static <T, R> String mapAndJoin(T[] inputs, Function<? super T, ? extends R> mapper, String delimiter) {
return mapAndJoin(Arrays.asList(inputs), mapper, delimiter, "", "");
}
+ /**
+ * Applies {@code mapper} on the elements in {@code inputs}, and joins them together separated
+ * by {@code delimiter} and starting with {@code prefix}.
+ *
+ * @return a new String that is composed from {@code inputs}.
+ */
public static <T, R> String mapAndJoin(T[] inputs, Function<? super T, ? extends R> mapper, String delimiter, String prefix) {
return mapAndJoin(Arrays.asList(inputs), mapper, delimiter, prefix, "");
}
+ /**
+ * Applies {@code mapper} on the elements in {@code inputs}, and joins them together separated
+ * by {@code delimiter} and starting with {@code prefix} and ending with {@code suffix}.
+ *
+ * @return a new String that is composed from {@code inputs}.
+ */
public static <T, R> String mapAndJoin(T[] inputs, Function<? super T, ? extends R> mapper, String delimiter, String prefix, String suffix) {
return mapAndJoin(Arrays.asList(inputs), mapper, delimiter, prefix, suffix);
}
+ /**
+ * Applies {@code mapper} on the elements in {@code inputs}, and joins them together separated
+ * by {@code delimiter}.
+ *
+ * @return a new String that is composed from {@code inputs}.
+ */
public static <T, R> String mapAndJoin(Iterable<T> inputs, Function<? super T, ? extends R> mapper, String delimiter) {
return mapAndJoin(inputs, mapper, delimiter, "", "");
}
+ /**
+ * Applies {@code mapper} on the elements in {@code inputs}, and joins them together separated
+ * by {@code delimiter} and starting with {@code prefix}.
+ *
+ * @return a new String that is composed from {@code inputs}.
+ */
public static <T, R> String mapAndJoin(Iterable<T> inputs, Function<? super T, ? extends R> mapper, String delimiter, String prefix) {
return mapAndJoin(inputs, mapper, delimiter, prefix, "");
}
+ /**
+ * Applies {@code mapper} on the elements in {@code inputs}, and joins them together separated
+ * by {@code delimiter} and starting with {@code prefix} and ending with {@code suffix}.
+ *
+ * @return a new String that is composed from {@code inputs}.
+ */
public static <T, R> String mapAndJoin(Iterable<T> inputs, Function<? super T, ? extends R> mapper, String delimiter, String prefix, String suffix) {
StringBuilder strb = new StringBuilder();
String sep = "";
@@ -193,4 +287,5 @@
}
return strb.toString();
}
+
}