One option is to separate out the two ideas into two methods, so that each method does one thing - then combine the calls
- One method to lazily filter, returning a sequence of matching results
- One method to return an item from a sequence, requiring it to be the only item
Guava has both of those:
Iterables.filter
to filter lazilyIterables.getOnlyElement
to return the sole element of a sequence
So for example:
String match = Iterables.getOnlyElement(Iterables.filter(source, predicate));