public static Iterable concat()

in harry-core/src/harry/ddl/SchemaSpec.java [417:470]


    public static <T> Iterable<T> concat(Iterable<T>... iterables)
    {
        assert iterables != null && iterables.length > 0;
        if (iterables.length == 1)
            return iterables[0];

        return () -> {
            return new Iterator<T>()
            {
                int idx;
                Iterator<T> current;
                boolean hasNext;

                {
                    idx = 0;
                    prepareNext();
                }

                private void prepareNext()
                {
                    if (current != null && current.hasNext())
                    {
                        hasNext = true;
                        return;
                    }

                    while (idx < iterables.length)
                    {
                        current = iterables[idx].iterator();
                        idx++;
                        if (current.hasNext())
                        {
                            hasNext = true;
                            return;
                        }
                    }

                    hasNext = false;
                }

                public boolean hasNext()
                {
                    return hasNext;
                }

                public T next()
                {
                    T next = current.next();
                    prepareNext();
                    return next;
                }
            };
        };
    }