view src/jungle/app/bbs/IterableConverter.java @ 103:1a5384cd1da4

Version up to 0.2
author one
date Mon, 25 Nov 2013 18:11:17 +0900
parents 29127ac788a6
children
line wrap: on
line source

package jungle.app.bbs;

import java.util.Iterator;

public class IterableConverter<A,B> implements Iterable<A>
{
	private final Iterable<B> iterable;
	private final Converter<A,B> converter;
	
	public IterableConverter(Iterable<B> _iterable,Converter<A,B> _converter)
	{
		iterable = _iterable;
		converter = _converter;
	}
	
	public Iterator<A> iterator()
	{
		return new IteratorConverter<A,B>(iterable.iterator(),converter);
	}
	
	private static final class IteratorConverter<A,B> implements Iterator<A>
	{
		private final Iterator<B> iterator;
		private final Converter<A,B> converter;
		
		public IteratorConverter(Iterator<B> _iterator,Converter<A,B> _converter)
		{
			iterator = _iterator;
			converter = _converter;
		}
		
		public boolean hasNext()
		{
			return iterator.hasNext();
		}

		public A next()
		{
			return converter.conv(iterator.next());
		}

		public void remove()
		{
			iterator.remove();
		}
	}

	public static interface Converter<A,B>
	{
		public A conv(B _b);
	}
}