我正在尝试在Java中对JSONObject
数组进行排序。有人能告诉我如何在Java中基于locale
进行排序,就像JavaScript的localeCompare()
一样?
在JavaScript中,我们可以进行如下区域设置排序,arr.sort( ( a, b ) => a.data[ "nested-name" ].localeCompare(b.data[ "nested-name" ]) )
我想在Java中进行区域比较排序。
您可以使用Collator
:
Collator collator = Collator.getInstance();
Arrays.sort(array, (JSONObject o1, JSONObject o2) ->
collator.compare(o1.get("data"), o2.get("data")));
下面是一个完整的示例,其中有一个collator,它使用默认的语言环境来比较基于data
属性的JSON对象数组:
import org.json.JSONObject;
import java.text.Collator;
import java.util.Arrays;
public class LocaleCompareTest {
public static void main(String[] args) {
JSONObject a = new JSONObject();
a.put("data", "a");
JSONObject b = new JSONObject();
b.put("data", "b");
JSONObject[] array = new JSONObject[]{b, a};
Collator collator = Collator.getInstance();
Arrays.sort(array, (JSONObject o1, JSONObject o2) ->
collator.compare(o1.get("data"), o2.get("data")));
System.out.println(Arrays.toString(array));
}
}
这会产生以下输出:
[{"data":"a"}, {"data":"b"}]
请参阅Javadoc,了解有关如何为所需的区域设置和排序规则配置排序器的更多信息。