Retrieving three separate sorted lists of items
If you're concerned about repeating yourself, you can look into the Java workaround/equivalent of C# delegates, though it might be more trouble than it's worth with regard to clarity and conciseness (http://www.javacamp.org/javavscsharp/delegate.html).

Everything below is just a hyper-abridged and incomplete explanation of one use of delegates.

Think of delegates as a stand-in for any method with a specific signature.  In this case, you could use it for searchRep.findAreaMatches and searchRep.findCityMatches (searchRep.findPostcodeMatches has a different signature).  At a high level, it might do something like this:

delegate List&lt;Area&gt; functionDelegate(string s);
functionDelegate f;
if (areaMatch):
    f = searchRep.findAreaMatches
else if (cityMatch):
    f = searchRep.findCityMatches
else:
    f = /* Your choice of what goes here */
functionDelegate(areaOrCity)


As a bit of an semi-related side-note, languages like Python allow for similar behavior without the need to explicitly declare something a delegate and without worrying about signatures, though you do have to make sure your types are correct.

def findMatches(arg):
    func = someFunction
    if areaMatch:
        func = searchRep.findAreaMatches
    elif postcodeMatch:
        func = searchRep.findPostcodeMatches
    elif cityMatch:
        func = searchRep.findCityMatches
    return func(arg)


Apologies if I totally missed the mark on what you were asking, I'm new to this.  Hope it helps!