[英]CompareTo/Sorting 2D array of Strings AND Integers
好的,所以我現在才知道如何通過字符串和整數對2d數組進行排序,但是我不確定如何將它們組合在一起。
我有一個二維的用戶數組,每一行都有一個用戶數據。 數據分別是列中的字符串或整數,所以如果我有多種比較方法,例如按名稱排序或按電話號碼排序,那么如何實現初始的2d數組,因為如果我將其聲明為String,則無法再進行比較按整數,如果我將其聲明為整數,則無法再通過String進行比較。
到目前為止,我正在使用基本的2d排序方法。
final Integer[][] data1 = userlistcopy;
Arrays.sort(data1, new Comparator<Integer[]>() {
@Override
public int compare(final Integer[] entry1, final Integer[] entry2) {
final Integer time1 = entry1[1];
final Integer time2 = entry2[1];
return time2.compareTo(time1);
}
});
System.out.println("====");
for (final Integer[] s : data1) {
System.out.println(s[0] + " " + s[1]);
}
要么
final String[][] data1 = userlistcopy;
Arrays.sort(data1, new Comparator<String[]>() {
@Override
public int compare(final String[] entry1, final String[] entry2) {
final String time1 = entry1[3];
final String time2 = entry2[3];
return time2.compareTo(time1);
}
});
System.out.println("====");
for (final String[] s : data1) {
System.out.println(s[0] + " " + s[1]);
}
因此,如果我比較不同的變量類型而又不會使編譯器不喜歡我,那么我有什么方法可以轉換變量? 或者當我只比較數組的整數列時,是否有可能只將整個compareTo方法聲明為Integer(即使包含String)?
謝謝!
編輯,更多詳細信息:我有一個2D數組,即IE
[0] [鮑勃] [3] [喬] [4] [約翰] [6] [吉米]
它存儲在String [] []用戶列表副本中; 如果我想使用String進行compareTo,它將可以正常工作,因為我可以比較userlistcopy [1],即使忽略了整數,也可以將ints視為字符串。 但是,如果我想通過Integer進行比較,則必須將userlistcopy更改為Integer數組,然后由於它們存在字符串而出現異常,而我忽略了將String數據槽設置為空的錯誤。
編輯(顯示出來)。
好的,我知道了! 我只是將所有數據都轉移到一個對象數組中,所以我聲明了它們各自的String / Int類型,然后將其與通過對象進行比較,在實際比較中,我只是將其轉換/解析為自己的需要,例如。 。
Arrays.sort(data1, new Comparator<Object[]>() {
@Override
public int compare(final Object[] entry1, final Object[] entry2) {
final Integer time1 = Integer.parseInt(entry1[1].toString());
final Integer time2 = Integer.parseInt(entry2[1].toString());
return time2.compareTo(time1);
}
});
要么
final Object[][] data1 = datanew;
Arrays.sort(data1, new Comparator<Object[]>() {
@Override
public int compare(final Object[] entry1, final Object[] entry2) {
final String time1 = entry1[2].toString();
final String time2 = entry2[2].toString();
return time2.compareTo(time1);
}
});
謝謝您的幫助!
絕對確定您不需要/想要2D陣列。 您需要類型為“用戶”的一維數組
class User{
public int ID;
public String name;
}
然后使用自定義比較器,就像已經為數組排序一樣。
整數解決方案:
Arrays.sort(data1, new Comparator<Object[]>() {
@Override
public int compare(final Object[] entry1, final Object[] entry2) {
final Integer time1 = Integer.parseInt(entry1[1].toString());
final Integer time2 = Integer.parseInt(entry2[1].toString());
return time2.compareTo(time1);
}
});
或字符串
final Object[][] data1 = datanew;
Arrays.sort(data1, new Comparator<Object[]>() {
@Override
public int compare(final Object[] entry1, final Object[] entry2) {
final String time1 = entry1[2].toString();
final String time2 = entry2[2].toString();
return time2.compareTo(time1);
}
});
或日期
public int compare(final Object[] entry1, final Object[] entry2) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
time1 = sdf.parse(entry1[3].toString());
time2 = sdf.parse(entry2[3].toString());
return time2.compareTo(time1);
} catch (ParseException ex) {
ex.printStackTrace();
}
}
});
我可以通過將整個2d數組作為一個對象,然后在Object compareTO方法中分別對它們進行比較,來分別比較它們。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.