Java 4 : 按 2 个值对数组进行排序
Java 4 : Sorting an array by 2 values
我目前正在处理 Java 4 中的一个项目,我必须按 2 个值对 ArrayList 进行排序。这是 ClassTest 的 ArrayList。
public class ClassTest{
String code; // "01", "02" or "03".
String date; // 01/01/2001.
}
我的问题是我必须先按代码排序,然后按当前日期的最近日期排序。我在 Java 4,我不能使用很多我通常用来排序数组的东西,比如 Comparator<ClassTest>
。
我可以使用哪种算法不会太慢?
我不知道这在你的 Java 版本中是否可行,但也许你可以尝试这种方式:
public class ClassTest implements Comparable<ClassTest> {
String code; // "01", "02" or "03".
String date; // 01/01/2001.
@Override
public int compareTo(ClassTest ct) {
// Sort by Code
result = code.compateTo(ct.code);
if (result != 0){return result;}
// Sort by Date ("by the closest date of the current date")
result = (...)
return result;
}
}
然后你就可以调用
Collections.sort(yourArrayListOfClassTest);
使用比较器接口,不使用泛型 (<..>)
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 CollectionSorter {
public static void main(String args[]) {
ClassTest obj1 = new ClassTest();
obj1.setCode("01");
obj1.setDate("2001-02-01");
ClassTest obj2 = new ClassTest();
obj2.setCode("01");
obj2.setDate("2001-01-01");
ClassTest obj3 = new ClassTest();
obj3.setCode("02");
obj3.setDate("2001-01-01");
List list = new ArrayList();
list.add(obj1);
list.add(obj2);
list.add(obj3);
System.out.println("Before sorting - " + list);
Collections.sort(list, new ClassTestComparator());
System.out.println("After sorting - " + list);
}
}
class ClassTest{
private String code; // "01", "02" or "03".
private String date; // 01/01/2001.
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String toString()
{
return "[code: " + code + ", date: " + date + "]";
}
}
class ClassTestComparator implements Comparator {
public int compare(Object o1, Object o2) {
ClassTest obj1 = (ClassTest) o1;
ClassTest obj2 = (ClassTest) o2;
int code1 = Integer.parseInt(obj1.getCode());
int code2 = Integer.parseInt(obj2.getCode());
int result = 0;
if(code1 > code2) {
result = 1;
}
if(code1 < code2) {
result = -1;
}
if (result != 0) {
return result;
}
// Sort by Date ("by the closest date of the current date")
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = null;
Date date2 = null;
try {
date1 = sdf.parse(obj1.getDate());
date2 = sdf.parse(obj2.getDate());
} catch(ParseException e) {
e.printStackTrace();
}
if(date1.compareTo(date2)>0){
result = 1;
}else if(date1.compareTo(date2)<0){
result = -1;
}else if(date1.compareTo(date2)==0){
result = 0;
}
return result;
}
}
注意:代码在Java 1.4 版本中测试并按预期工作
我目前正在处理 Java 4 中的一个项目,我必须按 2 个值对 ArrayList 进行排序。这是 ClassTest 的 ArrayList。
public class ClassTest{
String code; // "01", "02" or "03".
String date; // 01/01/2001.
}
我的问题是我必须先按代码排序,然后按当前日期的最近日期排序。我在 Java 4,我不能使用很多我通常用来排序数组的东西,比如 Comparator<ClassTest>
。
我可以使用哪种算法不会太慢?
我不知道这在你的 Java 版本中是否可行,但也许你可以尝试这种方式:
public class ClassTest implements Comparable<ClassTest> {
String code; // "01", "02" or "03".
String date; // 01/01/2001.
@Override
public int compareTo(ClassTest ct) {
// Sort by Code
result = code.compateTo(ct.code);
if (result != 0){return result;}
// Sort by Date ("by the closest date of the current date")
result = (...)
return result;
}
}
然后你就可以调用
Collections.sort(yourArrayListOfClassTest);
使用比较器接口,不使用泛型 (<..>)
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 CollectionSorter {
public static void main(String args[]) {
ClassTest obj1 = new ClassTest();
obj1.setCode("01");
obj1.setDate("2001-02-01");
ClassTest obj2 = new ClassTest();
obj2.setCode("01");
obj2.setDate("2001-01-01");
ClassTest obj3 = new ClassTest();
obj3.setCode("02");
obj3.setDate("2001-01-01");
List list = new ArrayList();
list.add(obj1);
list.add(obj2);
list.add(obj3);
System.out.println("Before sorting - " + list);
Collections.sort(list, new ClassTestComparator());
System.out.println("After sorting - " + list);
}
}
class ClassTest{
private String code; // "01", "02" or "03".
private String date; // 01/01/2001.
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String toString()
{
return "[code: " + code + ", date: " + date + "]";
}
}
class ClassTestComparator implements Comparator {
public int compare(Object o1, Object o2) {
ClassTest obj1 = (ClassTest) o1;
ClassTest obj2 = (ClassTest) o2;
int code1 = Integer.parseInt(obj1.getCode());
int code2 = Integer.parseInt(obj2.getCode());
int result = 0;
if(code1 > code2) {
result = 1;
}
if(code1 < code2) {
result = -1;
}
if (result != 0) {
return result;
}
// Sort by Date ("by the closest date of the current date")
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = null;
Date date2 = null;
try {
date1 = sdf.parse(obj1.getDate());
date2 = sdf.parse(obj2.getDate());
} catch(ParseException e) {
e.printStackTrace();
}
if(date1.compareTo(date2)>0){
result = 1;
}else if(date1.compareTo(date2)<0){
result = -1;
}else if(date1.compareTo(date2)==0){
result = 0;
}
return result;
}
}
注意:代码在Java 1.4 版本中测试并按预期工作