/* * Copyright 2015. Appsi Mobile * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.appsimobile.util; import android.support.v4.util.CircularArray; import java.lang.reflect.Array; import java.util.Arrays; import java.util.Comparator; /** * Created by nick on 09/08/15. */ public final class ArrayUtils { private ArrayUtils() { } public static String join(String separator, CircularArray<String> items) { StringBuilder result = new StringBuilder(); return join(separator, items, result); } public static String join(String separator, CircularArray<String> items, StringBuilder appendTo) { int N = items.size(); for (int i = 0; i < N; i++) { if (i > 0) { appendTo.append(separator); } appendTo.append(items.get(i)); } return appendTo.toString(); } public static <T> void sort(CircularArray<T> list, Comparator<? super T> comparator) { if (list.isEmpty()) return; T first = list.getFirst(); T[] array = (T[]) Array.newInstance(first.getClass(), list.size()); array = toArray(list, array); Arrays.sort(array, comparator); list.clear(); for (T item : array) { list.addLast(item); } } private static <T> T[] toArray(CircularArray<T> items, T[] result) { int N = items.size(); if (N != result.length) throw new IllegalArgumentException("Wrong array size"); for (int i = 0; i < N; i++) { result[i] = items.get(i); } return result; } public static <T> boolean contains(CircularArray<T> array, T item) { int N = array.size(); for (int i = 0; i < N; i++) { if (item == null && array.get(i) == null) return true; if (item != null && item.equals(array.get(i))) return true; } return false; } public static <T> void addAll(CircularArray<T> target, CircularArray<T> source) { int N = source.size(); for (int i = 0; i < N; i++) { target.addLast(source.get(i)); } } @SafeVarargs public static <T> CircularArray<T> asArray(T... items) { CircularArray<T> result = new CircularArray<>(); if (items != null) { for (T t : items) { result.addLast(t); } } return result; } }