view src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/util/IterableConverter.java @ 0:44465893e8b8

first Commit
author Kazuma
date Wed, 30 Nov 2016 01:47:55 +0900
parents
children
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.jungle.util;

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;
	}
	
	@Override
	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;
		}
		
		@Override
		public boolean hasNext()
		{
			return iterator.hasNext();
		}

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

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

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