If you're confident at least one will format will succeed:
formats.view.map{format => Try(format.parse(str)).toOption}.filter(_.isDefined).head
If you want to be a bit safer:
formats.view.map{format => Try(format.parse(str)).toOption}.find(_.isDefined)
Try
was introduced in Scala 2.10.
A view
is a type of collection that computes values lazily. It will apply the code within the Try
to only as many items in the collection as is necessary to find the first one that is defined. If the first format
applies to the string, then it won't try to apply the remaining formats to the string.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…