1

まず、並べ替える必要がある 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;
}
4

3 に答える 3