src/jdk.internal.vm.compiler/share/classes/org.graalvm.util/src/org/graalvm/util/CollectionsUtil.java
changeset 48861 47f19ff9903c
parent 47216 71c04702a3d5
child 50858 2d3e99a72541
--- 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();
     }
+
 }