Java Iterable Join join(final Iterable... iterables)

Here you can find the source of join(final Iterable... iterables)

Description

join multiple iterables into one

License

Open Source License

Parameter

Parameter Description
iterables a parameter
T a parameter

Return

iterable over multiple iterables

Declaration

public static <T> Iterable<T> join(final Iterable<T>... iterables) 

Method Source Code


//package com.java2s;
/*/*from ww w  .j  a v  a  2s.co m*/
 * IterationUtils.java Copyright (C) 2019. Daniel H. Huson
 *
 *  (Some files contain contributions from other authors, who are then mentioned separately.)
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import java.util.*;

public class Main {
    /**
     * join multiple iterables into one
     *
     * @param iterables
     * @param <T>
     * @return iterable over multiple iterables
     */
    public static <T> Iterable<T> join(final Iterable<T>... iterables) {
        return () -> new Iterator<T>() {
            private int which = 0;
            private Iterator<T> iterator = null;

            {
                while (which < iterables.length) {
                    iterator = iterables[which].iterator();
                    if (iterator.hasNext())
                        break;
                    which++;
                }
                if (which == iterables.length)
                    iterator = null; // no non-empty iterator found
            }

            @Override
            public boolean hasNext() {
                return iterator != null;
            }

            @Override
            public T next() {
                final T next = iterator.next();
                while (!iterator.hasNext()) {
                    which++;
                    if (which < iterables.length)
                        iterator = iterables[which].iterator();
                    else {
                        iterator = null;
                        break;
                    }
                }
                return next;
            }
        };
    }
}

Related

  1. join(final Iterable container)
  2. join(final Iterable iterable, final String joinString)
  3. join(final Iterable objs, final String delimiter)
  4. join(final Iterable objs, final String delimiter)
  5. join(final Iterable source)
  6. join(final String delimiter, final Iterable objs)
  7. join(Iterable elements, String delimiter)
  8. join(Iterable iterable, String delimiter)
  9. join(Iterable s, String delimiter)