title: How to get the next object in a list of objects?
body: <p>I'm using a Map in my application to store each location within a fictional game map. The current implementation allows me to get the start node, ie <code>Tiberius</code>. </p>
  
  <p>But I'm not sure how I can get to the next <code>location</code> on the map relative to the current location the player is at. For example when I create the map I am at "Tiberius" by default, so I'm wondering how I can create a method that will iterate to the next location, which would be "Desert" while a subsequent call to <code>move()</code> would bring the player to "Jerusalem".</p>
  
  <p>The graph is wired up as shown below with each location having a child location.</p>
  
  <p>From a quick search I see that a list can be iterated through by a field in the ID, like this <a href="https://stackoverflow.com/questions/6411542/java-list-get-next-or-previous-element-from-an-identifier">get element by ID </a> but in this implementation I need to get the next location relative to the current location.</p>
  
  <p>Does anyone know how this method could be implemented? </p>
  
  <p>This is how I've set up the map at the moment in my main class: </p>
  
  <pre><code>public class Main implements Commands{
  
  
      public static void main(String[] args)  {
  
          //Boolean to signify game state 
          boolean gameNotOver = true;
  
          //main game loop
          while (gameNotOver) {
  
              GameMap playerMap = new GameMap();
              playerMap.getStartNode();
  
              Main mainObj = new Main();
  
              //Take in user commands here
              //and parse commands
              String input = Input.getInput();
              if (input.equals("description")) {
                  System.out.println("Description: " );
              } else if (input.equals("move")) {
                  System.out.println("Moving to the next location in map.. " );
                  mainObj.move();     
          }
  
          //Game over 
          System.out.println("Game Over!");
          System.exit(0);
      }
  
      //Game player commands inherited from GameCharacterInterface:
  
      public String move() {
           //want to create a method here that will call the next 
           //location based on the current location that the player is in.
          // TODO Auto-generated method stub
          return null;
      }
  
  }
  </code></pre>
  
  <p>This is the Location class used to model the locations:</p>
  
  <pre><code>public class Location {
  
      private Location[] location;
  
      private int id;
  
      private String description;
  
      private String weight;
  
      private String name;
  
      private Item item;
  
      private Exit[] exit;
  
      private boolean visited = false;
      private boolean goalLocation;
      private int approximateDistanceFromGoal = 0;
      private Location parent;
  
      private Map&lt;Location, Integer&gt; children = new HashMap&lt;Location, Integer&gt;();
  
      public Location() {
          super();
      }
  
      public Location(String name){
          this.name = name;
      }
  
      public Location(String name, int goalDistance){
          this.name = name;
          this.approximateDistanceFromGoal = goalDistance;
      }
  
  
  
      public Location[] children(){
          return (Location[]) children.keySet().toArray(new Location[children.size()]);
      }
  
      public int getDistance(Location loc){
          if(children.get(loc) == null) System.out.println(this.name + ": " + loc.getName());
          return children.get(loc);
      }
  
  
      public int getChildLocationCount(){
          return children.size();
      }
  
      public void addChildLocation(Location child, int distance){
          children.put(child, distance);
      }
  
      public boolean isLeaf(){
          if (children.size() &gt; 0){
              return false;
          }else{
              return true;
          }
      }
  
  
      public void removeChild(Location child){
          children.remove(child);
      }
  
      public int getId() {
          return id;
      }
  
      public void setId(int id) {
          this.id = id;
      }
  
      public String getDescription ()
      {
          return description;
      }
  
      public void setDescription (String description)
      {
          this.description = description;
      }
  
  
      public String getWeight() {
          return weight;
      }
  
      public void setWeight(String weight) {
          this.weight = weight;
      }
  
      public String getName ()
      {
          return name;
      }
  
      public void setName (String name)
      {
          this.name = name;
      }
  
      public Exit[] getExit() {
          return exit;
      }
  
      public void setExit(Exit[] exit) {
          this.exit = exit;
      }
  
  
      public Location[] getLocation() {
          return location;
      }
  
      public void setLocation(Location[] location) {
          this.location = location;
      }
  
      public boolean isVisited() {
          return visited;
      }
  
      public void setVisited(boolean visited) {
          this.visited = visited;
      }
  
      public boolean isGoalLocation() {
          return goalLocation;
      }
  
      public void setGoalLocation(boolean goalLocation) {
          this.goalLocation = goalLocation;
      }
  
      public int getApproximateDistanceFromGoal() {
          return approximateDistanceFromGoal;
      }
  
      public void setApproximateDistanceFromGoal(int approximateDistanceFromGoal) {
          this.approximateDistanceFromGoal = approximateDistanceFromGoal;
      }
  
      public Location getParent() {
          return parent;
      }
  
      public void setParent(Location parent) {
          this.parent = parent;
      }
  
      public Item getItem() {
          return item;
      }
  
      public void setItem(Item item) {
          this.item = item;
      }
  
  
      @Override
      public String toString() {
          return "Location [location=" + Arrays.toString(location) + ", id=" + id
                  + ", description=" + description + ", name=" + name + ", item="
                  + item + ", exit=" + Arrays.toString(exit) + "]";
      }
  
  
  }
  </code></pre>
  
  <p>And this is the GameMap showing each of the locations and the getStartNode():</p>
  
  <pre><code>public class GameMap {
  
  
  private Location tiberius;
  
      public GameMap() {
  
          //Creating Locations
          tiberius = new Location("Tiberius", 200);
          tiberius.setDescription("You are in the city of Tiberius. There is a sword on the ground in front of you. You see a long street with high buildings and a castle.You see an exit to the south.");
  
          Location desert = new Location("Desert", 170);
          desert.setDescription("You are in hot dreary desert, surrounded by sand dunes and nothingness, you see an exit to the south.");
          Location jerusalem = new Location("Jerusalem", 270);
          jerusalem.setDescription("You are at battlefield of Jerusalem. You are in awe of your surroundings, you see an exit to the west.");
          Location hattin = new Location("Hattin", 120);
          hattin.setDescription("You are at battlefield of Hattin. You see the ruination of the battle and fallen comrades...You see an exit to the north.");
          Location damascus = new Location("Damascus", 130);
          damascus.setDescription("You are in Damascus. You see the some shady characters...you see an exit to the west.");
          Location tripoli = new Location("Tripoli", 80); 
          tripoli.setDescription("You are in Tripoli. You see the some more shady characters...you see an exit to the north.");
          Location antioch = new Location("Antioch", 60);
          antioch.setDescription("You are in the city of Antioch. You see a long street with high buildings and a castle.. You see the some more shady characters...you see an exit to the north.");
          Location sis = new Location("Sis", 100);
          sis.setDescription("You are in the city of Sis....exit ahead in the west.");
          Location tarsus = new Location("Tarsus", 20);
          tarsus.setDescription("You are in the city of Tarsus. ...you see an exit to the south.");
          Location cyprus = new Location("Cyprus", 0);
          cyprus.setDescription("You have reached the Byzantine Empire, your quest has finished!");
          cyprus.setGoalLocation(true);
  
          //Adding child locations
          tiberius.addChildLocation(desert, 105);
          desert.addChildLocation(jerusalem, 105);
          jerusalem.addChildLocation(hattin, 323);
          hattin.addChildLocation(damascus, 121);
          damascus.addChildLocation(tripoli, 121);
          tripoli.addChildLocation(antioch, 220);
          antioch.addChildLocation(sis, 126);
          sis.addChildLocation(tarsus, 121);  
          tarsus.addChildLocation(cyprus, 126);
  
  
  
      }
  
  
  
      public Location getStartNode(){
          System.out.println(tiberius.toString());
          return tiberius;
  
      }
  
  }
  </code></pre>