Learn to Live and Live to Learn

IT(たまにビジネス)に関する記事を読んで、考えて、使ってみたことをまとめる場。

Iterator

HadoopのReducerや、Androidアプリによく登場するIterator。いつも書き方を調べてしまうので自分用にまとめます。

例、

public void reduce ( Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter ) throws IOException
{
    int sum = 0;
    while ( values.hasNext() )
    {
        sum += values.next().get();
    }
    output.collect(key, new IntWritable(sum));
}

Iteratorとは、Collectionの要素に順番にアクセスするための機能です。
hasNext()メソッドで次の要素があるか確認し、next()メソッドで取得します。

import java.util.*;

public class Iterator {

	public static void main(String[] args) {
		HashMap map = new HashMap(); // オブジェクトの生成。
		String[] tel = {"03", "075", "06", "052"}; //key
		String[] area = {"Tokyo", "Kyoto", "Osaka", "Nagoya"}; // value
		
		// HashMapにキーバリューを代入。
		System.out.println("HashMap");
		for ( int i = 0; i < 4; i++ ) {
			map.put(tel[i], area[i]);
			System.out.println("|" + tel[i] + "|" + area[i] + "|");
		}
		
		// Iteratorを使って取り出す。
		System.out.println("Iterator");
		/*
		 * Iterator"i"に
		 * HashMap"map"の
		 * キーバリューを保持したSetをentrySet()で取得して
		 * iterator()によって反復しを
		 * 代入する。
		 */
		for ( java.util.Iterator i = map.entrySet().iterator(); i.hasNext(); ) { // java.utilを外すとなぜかエラーになる。
			System.out.println("キーバリューのペア: " + i.next());
		}
		
	}

}

実行結果。HashMapの順に出てくるわけではないことに注意。

HashMap
|03|Tokyo|
|075|Kyoto|
|06|Osaka|
|052|Nagoya|
Iterator
キーバリューのペア: 075=Kyoto
キーバリューのペア: 06=Osaka
キーバリューのペア: 052=Nagoya
キーバリューのペア: 03=Tokyo


Iterator
http://www.javaroad.jp/java_collection5.htm
http://www.geocities.jp/m_hiroi/java/abcjava09.html
Hadoop
http://xamry.wordpress.com/2012/09/11/your-first-hadoop-map-reduce-job/