3

次のようなオブジェクトの配列を含む Josn ファイルがあります。

{
    "tId": "Something",
    "StartTime": "05/29/2013 5:28:33 PM",
    "CompleteTime": "05/29/2013 5:28:33 PM",
    "Status": "success",
    "MachineName": "Machine",
},

開始時刻とマシン名に従って並べ替え、これら 2 つの情報のみをユーザーに表示する必要があります。2 つ以上のタスクの開始時間が同じ場合、それらの結果はマシン名に従ってソートする必要があります。解析後に取得した JsonArray を List に変換し、その後カスタム collections.sort を使用しようとしています。私は正しい方向に進んでいますか?Collections.sort のコンパレータを変更して、同じ開始時間の場合にマシン名に従って並べ替えるにはどうすればよいですか

  JsonArray allTasks = jsonParser.parse(reader).getAsJsonArray();

  ArrayList<String> list = new ArrayList<String>();

  if (allTasks != null) { 
     int len = allTasks.size();
     for (int i=0;i<len;i++){ 
      list.add(allTasks .get(i).toString());
     } 
  }
  for (String task : list) {
    // code to fetch just 2 fields from this task and then sort according to start time
  }
4

2 に答える 2

8

JSON/オブジェクト マッピングの詳細に応じて、並べ替えルーチンは次のようになります。

Collections.sort(myObjectList, new Comparator<MyObject>() {
  @Override
  int compare(MyObject a, MyObject b) {
    if (a.getStartTime().equals(b.getStartTime())) {
      return a.getMachineName().compare(b.getMachineName());
    }
    return a.getStartTime().compare(b.getStartTime());
  }
});
于 2013-06-04T15:35:08.250 に答える
6

MyObject1 つのオブジェクト (tId、startTime、completeTime、status、machineName) のデータを保持するクラスを作成する必要があります。

JsonObject次に、それぞれを解析MyObjectして a に追加しList<MyObject>ます。

次に、Collections.sort()コンパレータを使用してリストを並べ替えます。

于 2013-06-04T14:29:52.683 に答える