In addition to the other answers, I want to add that it is useful associated with map for example, to verify that there is only one item that matches a property and to retrieve it.
Suppose that a library returns a whole bunch of items, and only one item has your interest:
let my_item = match get_items().map(|item| item.some_property == reference).single() {
Some(item) => item,
None => return Error,
}
I like the idea of retrieving the original iterator in case of failure, BTW.