我是scala的新手,我必须根据country_name对Seq [Country]进行排序。预期结果应为:
{
"country_code": "AFG",
"country_name": "Afghanistan"
},
{
"country_code": "ALA",
"country_name": "Åland Islands"
},
{
"country_code": "AGO",
"country_name": "Angola"
}
但是我使用sortBy()在列表末尾进入了以下国家/地区:
{
"country_code": "ALA",
"country_name": "Åland Islands"
}
输入列表:
List(
Country(AFG,Afghanistan),
Country(AGO,Angola),
Country(ALA,Åland Islands)
)
下面是方法:
def sortCountry(sortIn: Seq[Country]): Seq[Country] = {
val result: Seq[Country] =
sortBy match {
case "country_code" => sortIn.sortBy(_.country_code)
case _ => sortIn.sortBy(_.country_name)
}
result
}
答案 0 :(得分:1)
之所以这样排序是因为Å
和A
是不同的字母。如果要将它们视为相同的字母,可以定义一个自定义Ordering
并进行如下排序:
case _ => sortIn.sortBy(_.country_name)(myCustomOrdering)
答案 1 :(得分:1)
感谢该回答对社区的利益,这是我通过使用implicit
函数的sortBy
参数实现的。
collection.sortBy(_.attributeName)(ord)
val ord = Ordering
.comparatorToOrdering(Collator.getInstance(Locale.getDefault))
.asInstanceOf[Ordering[String]]