Scala / Java Commons

Iterable vs Iterator

public interface Iterable<T> { Iterator<T> iterator(); }

An iterator is a simple way of allowing some to loop through a collection of data without assignment privileges (though with ability to remove).

public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }

  • Iterable does not track current position, iterator keeps track of current location in a collection

  • Iterator provides methods hasNext() and next()

  • Once an iterator is looped through by using foreach, it cannot be reused

  • Iterable supports for(T item:items) syntax

  • If you want to loop through a collection, called iterable.iterator for each looping

  • Iterator in scala extends TraversableOnce trait, Iterable does not

Find class member variables

case class StockType(date: java.sql.Date, open: Double, high: Double, low: Double, close: Double, volume: Double, adjclose: Double, symbol: String)

object Sample {

def getFields[T](implicit tag: Manifest[T] ) = {

(tag.runtimeClass).getDeclaredFields.map(f => (f.getName, f.getType))

}

def main(args:Array[String]){

getFields[StockType].foreach(println)

}

}

Output

(date,class java.sql.Date)

(open,double)

(high,double)

(low,double)

(close,double)

(volume,double)

(adjclose,double)

(symbol,class java.lang.String)