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

org.jmmo.tuple.Tuple Maven / Gradle / Ivy

package org.jmmo.tuple;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

public interface Tuple extends Serializable, Iterable {

    int getSize();

     E get(int i);

    default Object[] toArray() {
        final Object[] result = new Object[getSize()];
        for (int i = 0; i < getSize(); i++) {
            result[i] = get(i);
        }
        return result;
    }

    @Override default Iterator iterator() {
        return new TupleIterator(this);
    }

    @Override default Spliterator spliterator() {
        return Spliterators.spliterator(iterator(), getSize(),
                Spliterator.SIZED | Spliterator.IMMUTABLE | Spliterator.ORDERED);
    }

    default Stream stream() {
        return StreamSupport.stream(spliterator(), false);
    }

    class TupleIterator implements Iterator {
        private final Tuple tuple;
        private int index;

        TupleIterator(Tuple tuple) {this.tuple = tuple;}

        @Override public boolean hasNext() {
            return index < tuple.getSize();
        }

        @Override public Object next() {
            return tuple.get(index++);
        }
    }

    static int hashCode(Tuple tuple) {
        return Arrays.deepHashCode(tuple.toArray());
    }

    static String toString(Tuple tuple) {
        return "Tuple" + tuple.getSize() + Arrays.deepToString(tuple.toArray());
    }
}