对JSON数据进行排序
对JSON数据进行排序
最近在项目中需要对未存入到数据库中的数据进行排序,故使用Comparator进行排序。
代码实现如下
package com.test.sort;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
public class JSONSort {
public static void main(String[] args) {
List<VNCSessionJson> vncList = new ArrayList<>();
VNCSessionJson vnc1 = new VNCSessionJson();
vnc1.setVncID("1");
vnc1.setVncUserName("test1");
vnc1.setCreateTime("2018-11-26 15:42:14");
vncList.add(vnc1);
VNCSessionJson vnc2 = new VNCSessionJson();
vnc2.setVncID("2");
vnc2.setVncUserName("test2");
vnc2.setCreateTime("2018-11-26 15:42:16");
vncList.add(vnc2);
// Collections.sort(vncList, new SortComparator1("vncID", "desc"));
Collections.sort(vncList, getVncCompare("vncID", "asc"));
for (VNCSessionJson json : vncList) {
System.out.println(json.getVncID() + " " + json.getVncUserName() + " " + json.getCreateTime());
}
}
private static Comparator<VNCSessionJson> getVncCompare(String sortItem, String sortDire) {
Comparator<VNCSessionJson> comparator = new Comparator<VNCSessionJson>() {
@Override
public int compare(VNCSessionJson o1, VNCSessionJson o2) {
if ("vncID".equalsIgnoreCase(sortItem)) {
int id1 = Integer.parseInt(o1.getVncID());
int id2 = Integer.parseInt(o2.getVncID());
if ("asc".equalsIgnoreCase(sortDire)) {
return id1 - id2;
} else if ("desc".equalsIgnoreCase(sortDire)) {
return id2 - id1;
} else {
return 0;
}
} else if ("createTime".equalsIgnoreCase(sortItem)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date1 = format.parse(o1.getCreateTime());
Date date2 = format.parse(o2.getCreateTime());
long time1 = date1.getTime();
long time2 = date2.getTime();
if ("asc".equalsIgnoreCase(sortDire)) {
return (int) (time1 - time2);
} else if ("desc".equalsIgnoreCase(sortDire)) {
return (int) (time2 - time1);
} else {
return 0;
}
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
} else if ("vncUserName".equalsIgnoreCase(sortItem)) {
if ("asc".equalsIgnoreCase(sortDire)) {
return o1.getVncUserName().compareTo(o2.getVncUserName());
} else if ("desc".equalsIgnoreCase(sortDire)) {
return o2.getVncUserName().compareTo(o1.getVncUserName());
} else {
return 0;
}
} else {
return 0;
}
}
};
return comparator;
}
}
class VNCSessionJson {
private String vncID;
private String vncUserName;
private String createTime;
public String getVncID() {
return vncID;
}
public void setVncID(String vncID) {
this.vncID = vncID;
}
public String getVncUserName() {
return vncUserName;
}
public void setVncUserName(String vncUserName) {
this.vncUserName = vncUserName;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
}
class SortComparator1 implements Comparator<VNCSessionJson> {
private String sortItem;
private String sortDire;
public SortComparator1(String sortItem, String sortDire) {
this.sortItem = sortItem;
this.sortDire = sortDire;
}
@Override
public int compare(VNCSessionJson o1, VNCSessionJson o2) {
if ("vncID".equalsIgnoreCase(this.sortItem)) { // int sort
int id1 = Integer.parseInt(o1.getVncID());
int id2 = Integer.parseInt(o2.getVncID());
if ("asc".equalsIgnoreCase(this.sortDire)) {
return id1 - id2;
} else if ("desc".equalsIgnoreCase(this.sortDire)) {
return id2 - id1;
} else {
return 0;
}
} else if ("createTime".equalsIgnoreCase(this.sortItem)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date1 = format.parse(o1.getCreateTime());
Date date2 = format.parse(o2.getCreateTime());
long time1 = date1.getTime();
long time2 = date2.getTime();
if ("asc".equalsIgnoreCase(this.sortDire)) {
return (int) (time1 - time2);
} else if ("desc".equalsIgnoreCase(this.sortDire)) {
return (int) (time2 - time1);
} else {
return 0;
}
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
} else if ("vncUserName".equalsIgnoreCase(this.sortItem)) {
if ("asc".equalsIgnoreCase(this.sortDire)) {
return o1.getVncUserName().compareTo(o2.getVncUserName());
} else if ("desc".equalsIgnoreCase(this.sortDire)) {
return o2.getVncUserName().compareTo(o1.getVncUserName());
} else {
return 0;
}
} else { // nothing sort
return 0;
}
}
}
测试结果如下
升序
升序