现在有一组JSONArray数据,我想以其中一种元素来排序(我这里这个元素是int),这在实际工作中还是经常遇到的,主要是通过重写Comparator。
数据
[{
"repayTerm":"3","test":"2018-12-09"},
{
"repayTerm":"1","test":"2018-12-19"},
{
"repayTerm":"2","test":"2018-12-13"}]
第一版
jta.sort(new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
return ((JSONObject)o1).getIntValue("repayTerm")-((JSONObject)o2).getIntValue("repayTerm");
}
});
befor:
[{
"repayTerm":"3","test":"2018-12-09"},
{
"repayTerm":"1","test":"2018-12-19"},
{
"repayTerm":"2","test":"2018-12-13"}]
after:
[{
"repayTerm":"1","test":"2018-12-19"},
{
"repayTerm":"2","test":"2018-12-13"},
{
"repayTerm":"3","test":"2018-12-09"}]
第二版
jta.sort(((a,b)->((JSONObject)a).getIntValue("repayTerm")-((JSONObject)b).getIntValue("repayTerm")));
befor:
[{
"repayTerm":"3","test":"2018-12-09"},
{
"repayTerm":"1","test":"2018-12-19"},
{
"repayTerm":"2","test":"2018-12-13"}]
after:
[{
"repayTerm":"1","test":"2018-12-19"},
{
"repayTerm":"2","test":"2018-12-13"},
{
"repayTerm":"3","test":"2018-12-09"}]
第三版
jta.sort(Comparator.comparing(ele -> ((JSONObject) ele).getIntValue("repayTerm")));
befor:
[{
"repayTerm":"3","test":"2018-12-09"},
{
"repayTerm":"1","test":"2018-12-19"},
{
"repayTerm":"2","test":"2018-12-13"}]
after:
[{
"repayTerm":"1","test":"2018-12-19"},
{
"repayTerm":"2","test":"2018-12-13"},
{
"repayTerm":"3","test":"2018-12-09"}]
三版实际上都是做的同样的事情,寻求简洁优雅用第三版,求真务实追本溯源用第一版,第二版属于中庸,简洁且直观。