package org.teachingextensions.approvals.lite.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.teachingextensions.approvals.lite.util.lambda.Function1;
/**
* A static class of convenience methods for arrays and collections.
*/
public class ArrayUtils {
public static <T> java.util.Collection<T> addArray(java.util.Collection<T> v, T array[]) {
if ((array == null) || (v == null)) {
return v;
}
Collections.addAll(v, array);
return v;
}
public static <T> String toString(T[] values, Function1<T, String> formatter) {
return toString(Arrays.asList(values), formatter);
}
public static <T> String toString(Iterable<T> values, Function1<T, String> formatter) {
StringBuilder b = new StringBuilder();
for (T t : values) {
b.append(formatter.call(t)).append("\r\n");
}
return b.toString();
}
public static <T> T[] toReverseArray(T[] array) {
for (int i = 0; i < array.length / 2; i++) {
T o1 = array[i];
int end = array.length - i - 1;
T o2 = array[end];
array[i] = o2;
array[end] = o1;
}
return array;
}
public static boolean isEmpty(Object[] array) {
return ((array == null) || (array.length == 0));
}
public static <H, T extends H> T getFirst(T[] array, Comparator<H> comparator) {
return get(array, comparator, true);
}
private static <H, T extends H> T get(T[] array, Comparator<H> sorter, boolean wantFirst) {
if (isEmpty(array)) {
return null;
}
T last = array[0];
for (int i = 1; i < array.length; i++) {
int compare = sorter.compare(last, array[i]);
if ((wantFirst && compare > 0) || (!wantFirst && compare < 0)) {
last = array[i];
}
}
return last;
}
public static <T> T getLast(List<T> list) {
return list.get(list.size() - 1);
}
public static <T> List<T> combine(List<T> list1, List<T> list2) {
List<T> all = new ArrayList<>();
all.addAll(list1);
all.addAll(list2);
return all;
}
}