-1

"2013-7-13 \n 12 hour(s) 23 minute(s) "そのような種類のレコードを含む配列リストがあります。これを日付だけで並べ替えるにはどうすればよいですか。

コードの一部:

String date1 = c.getString(c.getColumnIndex(TabProDB.KEY_DATE) );
String time1 = c.getString(c.getColumnIndex(TabProDB.KEY_TIME) );
String date_time1 = date1 + "\n" +time1;
Toast.makeText(History.this, date_time1, Toast.LENGTH_SHORT).show();
listItems.add(date_time1);
4

5 に答える 5

2

Comparator<String>次のような独自の実装を作成します。

エラー チェックは行われないことに注意してください。これは、エラー チェックの方法を示すためのものです。

 public static void main(String[] args) {

    List<String> strings =
        Arrays.asList("2013-7-13 \n 12 hour(s) 23 minute(s)",
            "2013-7-10 \n 12 hour(s) 23 minute(s)");

    Collections.sort(strings, new Comparator<String>() {

      @Override
      public int compare(String o1, String o2) {

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

        Date date1;
        Date date2;
        try {
          date1 = format.parse(o1.split(" ")[0]);
          date2 = format.parse(o2.split(" ")[0]);
        } catch (ParseException e) {
          throw new IllegalArgumentException("Could not parse date!", e);
        }

        return date1.compareTo(date2);
      }
    });


    System.out.println(strings);

  }
于 2013-10-06T14:27:18.460 に答える
0

Array.sort には、カスタム コンパレータを渡すことができます。すべての文字列がまったく同じ形式であることがわかっている場合は、部分文字列に基づいてコンパレータを作成するだけです。

独自の並べ替えを実装することもできますが、Java が既に機能を提供しているため、これは理想的ではありません。

于 2013-10-06T14:19:28.907 に答える
0

あなたが試すことができる手順...

-- > 各エントリで "\n" が使用可能であることが確実な場合は、y と入力し、 org.apache.commons.lang.StringUtils.substringBefore(String, String) を使用して各エントリから日付部分のみを取得します。x と入力します。

--> 次のステップは、 java.text.SimpleDateFormat (yyyy-mm-dd)を使用して x を Date に解析することです。

--> 次に、キーと値のペアを含むことができる任意のコレクション オブジェクトを使用できます。ここで、キーは x で値は y です (値を自動的にソートできるTreeMapを使用します)。

このアプローチの問題: 部分 x が配列の複数のエントリで共通している場合、このアプローチは機能しません。


このコードを実行してみてください。最後の print ステートメントは、ソートされた結果を提供します。マップ内の値は、探しているものです。

class TestClass {
    public void checkThis() throws ParseException {
        String[] sampleValues = new String[3];
        sampleValues[0]= "2013-7-13 \n 12 hour(s) 23 minute(s) ";
        sampleValues[1]= "2013-8-14 \n 12 hour(s) 23 minute(s) ";
        sampleValues[2]= "2013-5-16 \n 12 hour(s) 23 minute(s) ";
        System.out.println("--> before"+ sampleValues);

        String x= null;
        Date date =null;
        Map<Date, String> map = new TreeMap<Date, String>();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        for (String y : sampleValues) {
            x = StringUtils.substringBefore(y, " \n");
            date= formatter.parse(x);           
            map.put(date, y);
        }

        System.out.println(map.keySet());
    }
}
于 2013-10-06T14:25:34.080 に答える