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

net.intelie.pipes.AbstractRow Maven / Gradle / Ivy

There is a newer version: 0.25.5
Show newest version
package net.intelie.pipes;

import net.intelie.pipes.util.Iterables;
import net.intelie.pipes.util.PipesComparator;

import java.io.Serializable;
import java.util.Iterator;
import java.util.NoSuchElementException;

public abstract class AbstractRow implements Row {
    private static final long serialVersionUID = 1L;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof AbstractRow)) return false;

        AbstractRow row = (AbstractRow) o;

        return Iterables.equals(this, row);
    }

    @Override
    public int compareTo(Row other) {
        int size = Math.min(size(), other.size());
        for (int i = 0; i < size; i++) {
            int temp = PipesComparator.instance().compare(this.get(i), other.get(i));
            if (temp != 0) return temp;
        }
        return Integer.compare(this.size(), other.size());
    }

    @Override
    public int hashCode() {
        return Iterables.hash(this);
    }

    @Override
    public String toString() {
        return "[" + Iterables.join(", ", this) + "]";
    }

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

    private class MyIterator implements Iterator, Serializable {
        private static final long serialVersionUID = 1L;

        private int current = 0;

        @Override
        public boolean hasNext() {
            return current < size();
        }

        @Override
        public Object next() {
            if (!hasNext())
                throw new NoSuchElementException("no more elements");
            return get(current++);
        }
    }
}