All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.intelie.pipes.util.Iterables Maven / Gradle / Ivy

There is a newer version: 0.25.5
Show newest version
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) {
        int result = 0;
        for (Object obj : iterable) {
            result *= 31;
            result ^= (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);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy