Compact code is overrated. In fact, striving for compactness might be something you've imagined as desirable, and you could be wrong. Strive for efficient, elegant code. (Elegant code is hard to define, but you know it when you see it.)
Why aren't there any comments in your code? Why do you have to tell us what this code is supposed to do when we should be able to determine that from reading the code? (And we can't.)
Your variable names aren't great. For example, someone reading the code should understand what the variables 'outer' and 'inner' do by reading their names.
The method is poorly named, and it might be doing too much. Based on your updated description of what the code does, a method called sortByName() and another called sortByResidence() might be appropriate. Or maybe just one method called, sortByNameThenResidence().
Source code line lengths should be broken at a reasonable length. 80 columns is the commonly accepted length.