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

org.rdfhdt.hdt.iterator.utils.Iter Maven / Gradle / Ivy

package org.rdfhdt.hdt.iterator.utils;

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

public class Iter {
	
	private Iter() {}

	public static  Iterable mapIterable(final Iterable iter1, final Transform converter) {
		return new Iterable() {
			@Override
			public Iterator iterator() {
				return Iter.map(iter1, converter);
			}
		};
	}


	public static  Iterator map(Iterable stream, Transform converter) {
		return map(stream.iterator(), converter) ;
	}

	public static  Iterator map(final Iterator stream, final Transform converter) {
		final Iterator iter = new Iterator() {
			@Override
			public boolean hasNext() {
				return stream.hasNext() ;
			}

			@Override
			public R next() {
				return converter.convert(stream.next()) ;
			}

			@Override
			public void remove() {
				throw new UnsupportedOperationException("map.remove") ;
			}
		} ;
		return iter ;
	}

	public static  Iterator dedup(Iterator it) {
		return new DedupIterator(it);
	}

	public static  Iterator filter(Iterable stream, Filter filter) {
		return filter(stream.iterator(), filter) ;
	}
	
	public static  Iterator filterNotEqual(final Iterator stream, final T sampleObject) {
		return filter(stream, new Filter(){
			@Override
			public boolean accept(T item) {
				return !sampleObject.equals(item);
			}});
	}
	
	
	public static  Iterator filter(final Iterator stream, final Filter filter) {
		final Iterator iter = new Iterator() {

			boolean finished;
			boolean slotOccupied;
			T       slot ;

			@Override
			public boolean hasNext() {
				if ( finished )
					return false ;
				while (!slotOccupied) {
					if ( !stream.hasNext() ) {
						finished = true ;
						break ;
					}
					T nextItem = stream.next() ;
					if ( filter.accept(nextItem) ) {
						slot = nextItem ;
						slotOccupied = true ;
						break ;
					}
				}
				return slotOccupied ;
			}

			@Override
			public T next() {
				if ( hasNext() ) {
					slotOccupied = false ;
					return slot ;
				}
				throw new NoSuchElementException("filter.next") ;
			}

			@Override
			public void remove() {
				throw new UnsupportedOperationException("filter.remove") ;
			}
		} ;

		return iter ;
	}


	public static  Iterator limit(final Iterator it, final int limit) {
		return new Iterator() {
			
			int pos;

			@Override
			public boolean hasNext() {
				return pos Iterator empty() {
		return new Iterator() {
			@Override
			public boolean hasNext() {
				return false;
			}

			@Override
			public T next() {
				throw new NoSuchElementException();
			}

			@Override
			public void remove() {
				throw new UnsupportedOperationException();
			}
		};
	}
	
	public static  Iterator single(final T element) {
		return new Iterator() {
			boolean used = false;
			
			@Override
			public boolean hasNext() {
				return !used;
			}

			@Override
			public T next() {
				if(!used) {
					used=true;
					return element;
				}
				throw new NoSuchElementException();
			}

			@Override
			public void remove() {
				throw new UnsupportedOperationException();
			}
		};
	}
	
	public static  Iterator side(final Iterator it, final SideEffect side) {
		return new Iterator() {

			@Override
			public boolean hasNext() {
				return it.hasNext();
			}

			@Override
			public T next() {
				T el = it.next();
				side.call(el);
				return el;
			}

			@Override
			public void remove() {
				
			}
		};
	}
	
	public static  void traverse(final Iterator it) {
		while(it.hasNext()) {
			it.next();
		}
	}
	
	public static  long count(final Iterator it) {
		long count=0;
		while(it.hasNext()){
			it.next();
			count++;
		}
		return count;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy