309 lines
5.5 KiB
Plaintext
309 lines
5.5 KiB
Plaintext
Application
|
||
Programming
|
||
Hend Alkittawi
|
||
|
||
Java Iteration
|
||
Iterating through objects in Java
|
||
Collections
|
||
|
||
INTRODUCTION
|
||
-
|
||
|
||
Related to the discussion on Java generics and collections is the
|
||
discussion on the following interfaces
|
||
-
|
||
|
||
-
|
||
|
||
Iterator, Iterable, Comparable, Comparator
|
||
|
||
The Java API has a consistent approach to iterators that are
|
||
implemented by nearly all collections in the class Library.
|
||
|
||
-
|
||
|
||
Iterators are implemented in the Java API using two primary interfaces:
|
||
-
|
||
|
||
Iterator: used to define an object that can be used as an iterator.
|
||
|
||
-
|
||
|
||
Iterable: used to define a collection from which an iterator can be
|
||
extracted.
|
||
|
||
-
|
||
|
||
The Comparable and Comparator interfaces in Java facilitate comparisons
|
||
between objects
|
||
|
||
THE ITERATOR INTERFACE
|
||
-
|
||
|
||
The Iterator interface is defined in the Java APIs.
|
||
|
||
-
|
||
|
||
The interface is used by a class that represents a collection
|
||
of objects, providing a means to move through the collection
|
||
one object at a time.
|
||
|
||
-
|
||
|
||
An Iterator provides a consistent and simple mechanism for
|
||
systematically processing a group of objects.
|
||
|
||
-
|
||
|
||
An Iterator is an object that has methods that allow you to
|
||
process a collection of items one at a time.
|
||
|
||
-
|
||
|
||
An Iterator object in Java is defined using the Iterator
|
||
interface.
|
||
|
||
THE ITERATOR INTERFACE
|
||
-
|
||
|
||
Every iterator object has a method called hasNext() that
|
||
returns a boolean value indicating whether there is at least
|
||
one more item to process.
|
||
|
||
-
|
||
|
||
Every Iterator also has a method called next() to retrieve the
|
||
next item in the collection to process.
|
||
|
||
-
|
||
|
||
The Iterator interface also has a method called remove() which
|
||
takes no parameters and has a void return type. A call to the
|
||
remove() method removes the object that was most recently
|
||
returned by the next method from the underlying collection.
|
||
|
||
THE ITERABLE INTERFACE
|
||
-
|
||
|
||
The Iterable interface has a single method iterator() that returns an Iterator
|
||
object.
|
||
|
||
-
|
||
|
||
If an object has implemented the Iterable interface, we can use a variation of the
|
||
for loop to process items using a simplified syntax → The enhanced for loop
|
||
(for-each loop).
|
||
|
||
-
|
||
|
||
For example if bookList is an Iterable object that contains book objects we can use
|
||
a for loop to process each book object as follows
|
||
for (Book myBook: bookList)
|
||
system.out.println( myBook)
|
||
|
||
-
|
||
|
||
This version of the for Loop processes each object in the Iterator in turn. It is
|
||
equivalent to the following:
|
||
Book myBook;
|
||
while( bookList.hasNext(){
|
||
myBook = bookList.next();
|
||
System.out.println( myBook) }
|
||
|
||
import java.util.Iterator;
|
||
public class Range implements
|
||
Iterable<Integer>{
|
||
|
||
import java.util.Iterator;
|
||
import java.util.NoSuchElementException;
|
||
|
||
import java.util.Iterator;
|
||
public class RangeTest {
|
||
|
||
public class RangeIterator implements
|
||
Iterator<Integer>{
|
||
|
||
public static void main(String[] args){
|
||
Range range = new Range(1, 7);
|
||
System.out.println("Looping with an
|
||
iterator");
|
||
Iterator<Integer> it =
|
||
range.iterator();
|
||
while(it.hasNext()){
|
||
int cur = it.next();
|
||
System.out.print(cur + "\t");
|
||
}
|
||
|
||
private int start, end;
|
||
private int cursor;
|
||
private int end;
|
||
|
||
public Range(int start, int end) {
|
||
this.start = start;
|
||
this.end = end;
|
||
}
|
||
|
||
public RangeIterator(int start, int
|
||
end){
|
||
this.cursor = start;
|
||
this.end = end;
|
||
}
|
||
|
||
public Iterator<Integer> iterator(){
|
||
return new RangeIterator(start,
|
||
end);
|
||
}
|
||
|
||
public boolean hasNext() {
|
||
return this.cursor < end;
|
||
}
|
||
|
||
}
|
||
|
||
public Integer next() {
|
||
if(this.hasNext()) {
|
||
int current = cursor;
|
||
cursor++;
|
||
return current;
|
||
}
|
||
throw new NoSuchElementException();
|
||
}
|
||
public void remove() {
|
||
throw new
|
||
UnsupportedOperationException();
|
||
}
|
||
}
|
||
|
||
System.out.println("\nLooping with a
|
||
for-each loop");
|
||
for(Integer cur : range){
|
||
System.out.print(cur + "\t");
|
||
}
|
||
}
|
||
}
|
||
|
||
Looping with an iterator
|
||
1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
Looping with a for-each loop
|
||
1
|
||
2
|
||
3
|
||
4
|
||
5
|
||
|
||
6
|
||
6
|
||
|
||
public class Course {
|
||
private String prefix;
|
||
private int number;
|
||
private String title;
|
||
private String grade;
|
||
|
||
public class ProgramOfStudy implements
|
||
Iterable<Course>{
|
||
private List<Course> list;
|
||
public ProgramOfStudy(){
|
||
list = new LinkedList<Course>();
|
||
}
|
||
|
||
public Course(String prefix, int number,
|
||
String title, String grade){
|
||
this.prefix = prefix;
|
||
this.number = number;
|
||
this.title = title;
|
||
if (grade == null)
|
||
this.grade = "";
|
||
else
|
||
this.grade = grade;
|
||
}
|
||
public Course(String prefix, int number,
|
||
String title){
|
||
this(prefix, number, title, "");
|
||
}
|
||
|
||
public class IterableTest {
|
||
public static void main(String[] args) throws
|
||
Exception{
|
||
ProgramOfStudy pos = new ProgramOfStudy();
|
||
pos.loadCourses();
|
||
System.out.println(pos);
|
||
|
||
public void addCourse(Course course){
|
||
if (course != null)
|
||
list.add(course);
|
||
}
|
||
|
||
for(Course course : pos) {
|
||
pos.addCourse(new Course("MATH", 1044,
|
||
"Caluclus I"));
|
||
}
|
||
|
||
public String toString(){
|
||
String result = "";
|
||
for (Course course : list)
|
||
result += course + "\n";
|
||
return result;
|
||
}
|
||
|
||
System.out.println("Removing courses with
|
||
no grades.\n");
|
||
Iterator<Course> itr = pos.iterator();
|
||
while (itr.hasNext()){
|
||
Course course = itr.next();
|
||
if (!course.taken())
|
||
itr.remove();
|
||
}
|
||
System.out.println(pos);
|
||
}
|
||
|
||
@Override
|
||
public Iterator<Course> iterator() {
|
||
return list.iterator();
|
||
}
|
||
|
||
public boolean taken(){
|
||
return !grade.equals("");
|
||
}
|
||
|
||
public void loadCourses() {
|
||
list.add(new Course("CS", 3443,
|
||
"Application Programming", "A+"));
|
||
list.add(new Course("CS", 3343,
|
||
"Algorithms", "B"));
|
||
list.add(new Course("CS", 1173, "Data
|
||
Analysis and Visualization", "C+"));
|
||
list.add(new Course("CS", 2073,
|
||
"Introduction to Programming"));
|
||
}
|
||
|
||
public String toString(){
|
||
String result = prefix + " " + number
|
||
+ ": " + title;
|
||
if (!grade.equals(""))
|
||
result += " [" + grade + "]";
|
||
return result;
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
DO YOU HAVE ANY
|
||
QUESTIONS?
|
||
|
||
THANK
|
||
YOU!
|
||
|
||
@
|
||
|
||
hend.alkittawi@utsa.edu
|
||
|
||
By Appointment
|
||
Online
|
||
|
||
|