Which is better for checking previous object in list?
The former would definitely be more efficient.

In the latter case, you "forget" a local variable that you have available (by letting it go out of scope), and then on the next iteration get it back by calling stages.get().  There's no way that the get() call will be as cheap as simply referencing the lastDirection variable.