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

almost.functional.utils.ArrayIterable Maven / Gradle / Ivy

Go to download

Almost Functional is very low impact functional classes inspired by guava, jdk 1.8 and various others.

There is a newer version: 1.8
Show newest version
/*
 * Copyright (c) 2013-2014, [email protected]
 *
 * Permission to use, copy, modify, and/or distribute this software for any purpose with or
 * without fee is hereby granted, provided that the above copyright notice and this permission
 * notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO
 * THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT
 * SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR
 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
 * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OR PERFORMANCE OF THIS SOFTWARE.
 */

package almost.functional.utils;


import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 * An iterable over an array.
 * @param  the type of the array elements.
 */
public class ArrayIterable implements Iterable {
	private final T[] data;

	/**
	 * Basic constructor.
	 * @param data array of type T
	 */
	public ArrayIterable(T ... data) {
		this.data = data;
	}

	/**
	 * Factory function to create an iterable over an array of T.
	 * @param data the array of type T
	 * @param   the type of the elements in the array
	 * @return and ArrayIterable of type T
	 */
    public static  ArrayIterable newIterable(T ... data) {
        return new ArrayIterable(data);
    }

	@Override
	public Iterator iterator() {
		return new ArrayIterator(data);
	}

	private class ArrayIterator extends ImmutableIterator {
		private final D[] data;
		private int index;

		private ArrayIterator(D[] data) {
			this.data = data;
			index = 0;
		}

		@Override
		public boolean hasNext() {
			return data != null && index < data.length;
		}

		@Override
		public D next() {
			if (!hasNext()) {
				throw new NoSuchElementException();
			}
			D next = data[index];
			index++;
			return next;
		}
	}


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy