如何基于具有Unicode字符的文件对集合进行排序?

时间:2018-07-06 14:06:35

标签: scala

我是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
 }

2 个答案:

答案 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]]