Iterable Immutable List Assignment

From CSE425S Wiki
Jump to navigation Jump to search

Studio To Revisit

In this studio we will complete the DefaultImmutableList implementation from the ImmutableList studio.

ImmutableList

The ImmutableList interface extends Iterable which has one method: iterator().

public interface ImmutableList<E> extends Iterable<E> {
	E head();
	ImmutableList<E> tail();
	boolean isEmpty();
}

Iterable

interface java.lang.Iterable<T>

  1. Iterator<T> iterator()

Iterator

interface java.util.Iterator<T>

  1. boolean hasNext()
  2. T next()

Examples

Using Iterable

Implementing Iterable

DoubleRange

ArrayIterable

Example

class: IterableImmutableListExample.java Presentation icon-72a7cf.svg
package: immutable.list.example
source folder: src/main/java

The code:

ImmutableList<Integer> numbers = Lists.brackets(4, 66, 99);
for (Integer i : numbers) {
	System.out.println(i);
}

produces:

4
66
99

Diagrams

ImmutableList

ImmutableList<Char> letters = Lists.brackets('A', 'B', 'C'); <nowiki>

[[File:ImmutableList_letters.svg|600px]]

==iterator()==

 <nowiki>ImmutableList<Char> letters = Lists.brackets('A', 'B', 'C');
Iterator<Char> iter = letters.iterator() <nowiki>

[[File:ImmutableList_iterator.svg|600px]]

==next()==

[[File:ImmutableList_iterator_next.svg|600px]]

==next() next()==

[[File:ImmutableList_iterator_next_next.svg|600px]]

==next() next() next()==
[[File:ImmutableList iterator next next next.svg|600px]]

=Code To Implement=
==enum EmptyImmutableList==
{{JavaToImplement|EmptyImmutableList|iterator|immutable.list.assignment}}
===iterator()===
return an [https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html Iterator] for the EmptyImmutableList.

Question to ask yourself: Does an iterator for an EmptyImmutableList ever have a next?

==class NonEmptyImmutableList==
{{JavaToImplement|NonEmptyImmutableList|iterator|immutable.list.assignment}}
===iterator()===
return an [https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html Iterator] for this instance of NonEmptyImmutableList.

Note: If you are within an anonymous inner class, the way to get the outer class's this instance is to qualify it with the out class identifier.  For example:

 <nowiki>NonEmptyImmutableList.this

Test

class: IterableAssignmentTestSuite.java Junit.png
package: immutable.list.assignment
source folder: src/test/java
class: ImmutableListIteratorMethodTestSuite.java Junit.png
package: immutable.list.assignment
source folder: src/test/java