まず、並べ替える必要がある 3 つのプロパティを持つニュース記事というオブジェクトがあります。
年 (int)、月 (int)、タイプ (文字列 - オンライン、紙)
たとえば、次のようになります。
- オンライン 2013 4
- オンライン 2013 1
- オンライン 2009 11
- オンライン 2008 4
- 論文 2012 12
- 論文 2011 9
何が起こっているのかというと、月と年は正しくソートされているように見えますが、タイプによるソートに問題があります。compareToで文字列でソートする適切な方法は何ですか?
現時点での結果:
- 論文 2012 12
- 論文 2011 9
- オンライン 2013 4
- オンライン 2013 1
- オンライン 2009 11
- オンライン 2008 4
これが私の方法です(少し風変わりで申し訳ありません。タイプでソートするさまざまな方法を試し、実験していました):
@Override
public int compareTo(Article rs) {
Integer x = 0;
Integer year1 = 0;
Integer year2 = 0;
Integer month1 = 99999;
Integer month2 = 99999;
Integer type1 = 99999;
Integer type2 = 99999;
if(rs.year != null && year != null) {
if(!rs.year.equals(""))
year1 = Integer.parseInt(rs.year);
if(!year.equals(""))
year2 = Integer.parseInt(year);
}
if(rs.month != null && month != null) {
if(!rs.month.equals(""))
month1 = Integer.parseInt(rs.month);
if(!month.equals(""))
month2 = Integer.parseInt(month);
}
if(rs.type == null)
type1 = 99999;
else
type1 = 0;
if(type == null)
type2 = 99999;
else
type2 = 0;
x = type2.compareTo(type1);
if(x != 0) {
return x;
}
x = year1.compareTo(year2);
if(x != 0) {
return x;
}
x = month1.compareTo(month2);
if(x != 0) {
return x;
}
return x;
}