JAVA Can someone explain the public Iterator iterator to me
JAVA
Can someone explain the public Iterator<Item> iterator() to me.
import java.util.Iterator;
/*
 * GroupsQueue class supporting addition and removal of items
 * with respect to a given number of priorities and with
 * respect to the FIFO (first-in first-out) order for items
 * with the same priority.
 *
 * An example, where GroupsQueue would be useful is the airline
 * boarding process: every passenger gets assigned a priority,
 * usually a number, e.g., group 1, group 2, group 3, etc. and
 * the passengers line up at the end of the queue of their groups
 * in a FIFO fashion; and, when removing from the GroupsQueue,
 * i.e., when the passengers are boarding the plane, they get
 * removed first by their group priorities and then by their FIFO
 * ordering within that particular priority group.
 *
 * Your homework is to implement the below GroupsQueue data
 * structure, so that it functions in the way described above.
 *
 * You may use the provided Queue class for implementing the
 * GroupsQueue class.
 */
public class GroupsQueue<Item> implements Iterable<Item> {
    private Node<Item> first;
       private Node<Item> last;
    private int n;
 
    private static class Node<Item> {
    private Item item;
    private Node<Item> next;
    }
   
    public void Queue() {
    first = null;
    last = null;
    n = 0;
    }
    // TODO : implement the data structure (20 points)
   /**
    * Initializes an empty GroupsQueue with g groups
    * @return
    */
    public GroupsQueue(int g) {
        // TODO : implement the constructor (20 points)
    }
   
    /**
    * Is this GroupsQueue empty?
    */
    public boolean isEmpty() {
        return size() == 0;
    }
   
    /**
    * Returns the number of items in the GroupsQueue.
    */
    public int size() {
        return n; // TODO (20 points)
    }
   
    /**
    * Adds the item to this GroupsQueue with group id = gId.
    */
    public void add(Item item, int gId) {
        Node<Item> oldlast = last;
 last = new Node<Item>();
 last.item = item;
 last.next = null;
 if (isEmpty()) first = last;
 else oldlast.next = last;
 n++;
 }
        // TODO (20 points)
   
    /**
    * Removes and returns the item with the lowest group id
    */
    public Item remove() {
 } // TODO (20 points)
/**
 * Returns an iterator that iterates over the items in this GroupsQueue
 * in group id order (lowest id first) and in FIFO order in each group.
 */
    public Iterator<Item> iterator() {
        // TODO
 // BONUS
        return null;
    }
 }
Solution
********Sorry for re-writing your code *********
But what I would like to tell you is something is missing in the above code. So modified accordingly please see below
package groupqueue;
import java.util.ArrayList;
 import java.util.Iterator;
public class GroupsQueue<Item> implements Iterable<Item> {
    private ArrayList<Group> groups;
   
    //Defining Groups in GroupQueue
    private class Group{
    private Node<Item> first;
    private Node<Item> last;
    private int n;
      
    //Nodes in each group
    private class Node<Item> {
        private Item item;
    private Node<Item> next;
      
    public Node(Item data) {
    this.item = data;
    }
      
        public Node(Item data, Node next) {
    this(data);
    this.next = next;
    }
    }
   
    public void Queue() {
        first = null;
    last = null;
    n = 0;
    }
      
    //Add node to the existiting node
    public void add(Item data) {
    last = new Node(data, last);
    n++;
    }
      
    //removes the item which has lowest group id and came in the first
    public Item dequeue() {
    Item temp = first.item;
    first = first.next;
    n--;
    return temp;
    }
    public int size(){
        return n;
    }
    }
    // TODO : implement the data structure (20 points)
    /**
    * Initializes an empty GroupsQueue with g groups
    * @return
    */
    public GroupsQueue(int g) {
       
        //creating g groups
        groups = new ArrayList<Group>(g);
        for(int i=0;i<g;i++){
            groups.add(new Group());
        }
    // TODO : implement the constructor (20 points)
       
    }
   
    /**
    * Is this GroupsQueue empty?
    */
    public boolean isEmpty() {
    return size() == 0;
    }
   
    /**
    * Returns the number of items in the GroupsQueue.
    */
    public int size() {
        int num = 0;
       
        //Calculating all the items in all groups
    for(int i = 0; i < groups.size(); i++){
    num += groups.get(i).size();
    }
    return num; // TODO (20 points)
    }
   
    /**
    * Adds the item to this GroupsQueue with group id = gId.
    */
    public void add(Item item, int gId) {
       
        //add item to given gid
        Group tempGroup = groups.get(gId);
        tempGroup.add(item);
    }
    // TODO (20 points)
    /**
    * Removes and returns the item with the lowest group id
    */
    public Item remove() {
       
        //removing item which has lowest gid and came last
    for(int i = 0; i < groups.size(); i++){
    if(groups.get(i).size()!=0){
        return groups.get(i).dequeue();
    }
    }
            return null;
    } // TODO (20 points)
    /**
    * Returns an iterator that iterates over the items in this GroupsQueue
    * in group id order (lowest id first) and in FIFO order in each group.
    */
    public Iterator<Item> iterator() {
    // TODO
    // BONUS
        Iterator<Item> temp = (Iterator<Item>) groups.iterator();
    return temp;
    }
    }
GroupQueue will have objects of Groups and each group may have any number of items.
public Iterator<Item> iterator() will iterate throgh all the group that are available in GroupQueue based on lowestGid and FIFO order.
Hope this helps!




