net.intelie.pipes.util.Iterables Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pipes-api Show documentation
Show all versions of pipes-api Show documentation
Intelie Pipes' API classes and interfaces
package net.intelie.pipes.util;
import java.lang.reflect.Array;
import java.util.*;
public abstract class Iterables {
public static boolean equals(Iterable a, Iterable b) {
Iterator ita = a.iterator(), itb = b.iterator();
while (ita.hasNext() && itb.hasNext())
if (!Objects.equals(ita.next(), itb.next()))
return false;
return !ita.hasNext() && !itb.hasNext();
}
public static int size(Iterable iterable) {
if (iterable instanceof Collection)
return ((Collection) iterable).size();
int size = 0;
for (Object ignored : iterable) {
size++;
}
return size;
}
public static boolean sameElements(Iterable a, Iterable b) {
class Count {
int count = 0;
}
Map map = new HashMap<>();
for (T obj : a) {
Count count = map.get(obj);
if (count == null)
map.put(obj, count = new Count());
count.count++;
}
for (T obj : b) {
Count count = map.get(obj);
if (count == null)
return false;
if (--count.count == 0)
map.remove(obj);
}
return map.size() == 0;
}
public static String join(String separator, Object[] iterable) {
return join(separator, Arrays.asList(iterable));
}
public static String join(String separator, Iterable iterable) {
return joinWithLast(separator, separator, iterable);
}
public static String joinWithLast(String separator, String lastSeparator, Iterable iterable) {
StringBuilder builder = new StringBuilder();
Iterator iterator = iterable.iterator();
boolean first = true, hasNext = iterator.hasNext();
for (; hasNext; ) {
Object obj = iterator.next();
hasNext = iterator.hasNext();
if (!first)
builder.append(hasNext ? separator : lastSeparator);
if (obj != null)
builder.append(obj);
first = false;
}
return builder.toString();
}
public static int hash(Iterable iterable) {
if (iterable == null) return 0;
int result = 1;
for (Object obj : iterable) {
result = result * 31 + (obj != null ? obj.hashCode() : 0);
}
return result;
}
public static boolean isEmpty(Iterable properties) {
return !properties.iterator().hasNext();
}
public static T getFirst(Iterable iterable, T defaultValue) {
Iterator it = iterable.iterator();
if (!it.hasNext())
return defaultValue;
return it.next();
}
public static T[] toArray(Iterable iterable, Class clazz) {
ArrayList list = new ArrayList<>();
addAll(list, iterable);
T[] arr = (T[]) Array.newInstance(clazz, list.size());
list.toArray(arr);
return arr;
}
public static void addAll(Collection list, Iterable iterable) {
for (T obj : iterable)
list.add(obj);
}
}