package com.github.stakafum.mapreduce;
import java.util.*;
/**
* 一组值, 使用ArrayList保存,每个元素都有对应的索引index
* @author Saito Takafumi
*
* Suffle処理後にバリューをまとめるためのクラス
* @param <V> Reduceフェーズの入力となるバリューのクラス
*/
public class GroupedValues<V> implements Iterable<V> , Iterator<V> {
ArrayList<V> gValues;
int index;
//空的构造函数,索引=0
GroupedValues(){
this.gValues = new ArrayList<V>();
this.index = 0;
}
//使用了一个元素,将这个元素加入到列表中,索引还是0.因为索引是从0开始的
GroupedValues(V value){
this.gValues = new ArrayList<V>();
this.gValues.add(value);
this.index = 0;
}
//添加一个元素
void add(V v){
gValues.add(v);
index++;
}
public int getSize(){
return this.gValues.size();
}
boolean hasValue(){
return index <= 0 ? false : true;
}
V get(){
V v = gValues.get(index);
index--;
return v;
}
@Override
public Iterator<V> iterator() {
return gValues.iterator();
}
@Override
public boolean hasNext() {
return index > 0;
}
@Override
public V next() {
V v = gValues.get(index);
index--;
return v;
}
@Override
public void remove() {
this.gValues.remove(this.index);
this.index--;
}
}