# thread-first
## Navigation
[[thread-first]] `->` is ideal for navigating large, nested structures.
(-> results
:matches
(nth 3)
:scores
(get "total_points"))
This works with Java objects too
(-> results
.getMatches
(nth 3)
.getScores
(.getKey "total_points"))
## Transformation
The second use case of `->` is performing a series of functional transformations on a single value:
(-> username
string/trim
string/lower-case
(string/replace #"[^a-z]" "-"))
(-> game-state
(assoc :next-player :player2)
(update :turn-counter inc)
(update-in [:scores :player1] + 10)
(update-in [:scores :player2] - 3))