亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Android中,我如何按日期對數組項進行分組?

在Android中,我如何按日期對數組項進行分組?

婷婷同學_ 2023-09-27 16:47:35
對象array的    Statement:[       {       "date": "12-09-19 11:02:47",       "Country": "Bangladesh",       "Profession": "X",       "Salary": "100",       },       {       "date": "12-09-19 11:02:47",       "Country": "Bangladesh",       "Profession": "Y",       "Salary": "101",       },       {       "date": "12-09-19 11:02:47",       "Country": "Bangladesh",       "Profession": "Z",       "Salary": "102",       },       {       "date": "11-09-19 11:02:47",       "Country": "India",       "Profession": "I",       "Salary": "103",       },       {       "date": "11-09-19 11:02:47",       "Country": "India",       "Profession": "J",       "Salary": "104",       },       {       "date": "10-09-19 11:02:47",       "Country": "Nepal",       "Profession": "N",       "Salary": "105",       },       {       "date": "10-09-19 11:02:47",       "Country": "Nepal",       "Profession": "M",       "Salary": "106",       }       ]我正在嘗試創建一個新的array,它將創建一個object包含每個日期(作為鍵)和同一object.新數組應如下所示:    "10-09-19": [    {      "Country": "Nepal",      "Profession": "M",      "Salary": "106",    },    {      "Country": "Nepal",      "Profession": "N",      "Salary": "105",    }    ],    "11-09-19": [{      "Country": "India",      "Profession": "J",       "Salary": "104",    },    {      "Country": "India",      "Profession": "I",      "Salary": "103",    }    ],    "12-09-19": [{      "Country": "Bangladesh",      "Profession": "x",       "Salary": "104",    },    {      "Country": "Bangladesh",      "Profession": "y",      "Salary": "103",    },    {      "Country": "Bangladesh",      "Profession": "z",      "Salary": "102",    }    ]
查看完整描述

4 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

使用 hashmap 明智地存儲數據。哈希圖的鍵將是日期。這是我的代碼,它可能會幫助您理解邏輯。


      var sortedList= HashMap<String, MutableList<Model>>() // create hashmap to store data

        var temp: MutableList<Model>? = ArrayList<Model>()

        for (item in currentList!!) {

            temp = sortedList?.get(item.date.split(" ").get(0)) // get date and remove timing


            if (temp != null)     //if this is not null it mean this contain items

                temp.add(item)

            else {

                temp = ArrayList<Model>()  //if this is null it means this is new data or new data

                temp.add(item)

            }


            sortedList?.put(item.date.split(" ").get(0), temp)

    }

我的代碼是 kotlin 的,對此深表歉意??鞓肪幋a。


查看完整回答
反對 回復 2023-09-27
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

我假設你提供的都是JSON字符串(但它們看起來無效),那么你可以按如下方式實現轉換:


ObjectMapper mapper = new ObjectMapper();

ObjectNode root = (ObjectNode) mapper.readTree(jsonStr);

ObjectNode rootNew = mapper.createObjectNode();

for (int i = 0; i < root.get("Statement").size(); i++) {

    String date = root.get("Statement").get(i).get("date").asText().split(" ")[0];

    ObjectNode node = (ObjectNode) ((ObjectNode) root.get("Statement").get(i));

    node.remove("date");

    if (rootNew.has(date)) {

        ((ArrayNode) rootNew.get(date)).add(node);

    } else {

        rootNew.put(date, mapper.createArrayNode().add(node));

    }

}

System.out.println(rootNew.toString());

控制臺輸出:


{

  "12-09-19":[

    {

      "Country":"Bangladesh",

      "Profession":"X",

      "Salary":"100"

    },

    {

      "Country":"Bangladesh",

      "Profession":"Y",

      "Salary":"101"

    },

    {

      "Country":"Bangladesh",

      "Profession":"Z",

      "Salary":"102"

    }

  ],

  "11-09-19":[

    {

      "Country":"India",

      "Profession":"I",

      "Salary":"103"

    },

    {

      "Country":"India",

      "Profession":"J",

      "Salary":"104"

    }

  ],

  "10-09-19":[

    {

      "Country":"Nepal",

      "Profession":"N",

      "Salary":"105"

    },

    {

      "Country":"Nepal",

      "Profession":"M",

      "Salary":"106"

    }

  ]

}


查看完整回答
反對 回復 2023-09-27
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

首先感謝各位回答我的問題。我后來找到了一個解決方案。我想我應該與大家分享這一點。


JSONArray statementArray = response.getJSONArray("statement");


Map<String, List<String>> map= new HashMap<String, List<String>>();

for(int i = 0; i < statementArray.length(); i ++) {


   JSONObject mJsonObjectStatement = statementArray.getJSONObject(i);

   String date= mJsonObjectStatement.getString("date").split(" ")[0];

   List<String> valSet = new ArrayList<String>();

   valSet.add(0,mJsonObjectStatement.getString("Country"));

   valSet.add(1,mJsonObjectStatement.getString("Profession"));

   valSet.add(2,mJsonObjectStatement.getString("Salary"));

   map.put(date,valSet);

}

for (Map.Entry<String, List<String>> entry : transactionReportMap.entrySet()) {

   String key = entry.getKey();

   List<String> values = entry.getValue();

   Log.e("Key = " , key);

   Log.e("Values = " , values + "n");

}

Log.e("Result:",map.toString());

上述解決方案沒有提供相同的結果,但它達到了我的目的。


我找到的另一個解決方案


JSONArray statementArray = response.getJSONArray("statement");


ObjectMapper mapper = new ObjectMapper();

Map<String, List<String>> map= new HashMap<String, List<String>>();

for(int i = 0; i < statementArray.length(); i ++) {

   JSONObject mJsonObjectStatement = statementArray.getJSONObject(i);

   String date= mJsonObjectStatement.getString("date").split(" ")[0];

   if (transactionReportMap.containsKey(date)) {

       map.get(date).add(date);

   } else {

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

       infoList.add(mJsonObjectStatement.getString("Country"));

       infoList.add(mJsonObjectStatement.getString("Profession"));

       infoList.add(mJsonObjectStatement.getString("Salary"));

       map.put(date, infoList);

   }

}

StringWriter result = new StringWriter();

try {

  mapper.writeValue(result, map);

} catch (IOException e) {

  e.printStackTrace();

}

Log.e("Result: ",result+"");


查看完整回答
反對 回復 2023-09-27
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

對于這個問題來說可能為時已晚,但我正在分享我的答案。


            //Define an empty hash map

            Map<String, JSONObject> finalMap = map;


            for (JSONObject object : Statement) {

                String key = object.getString("date");


                //Split the date from date time

                if (key.contains(" ")) {

                    key = key.split(" ")[0];

                }


                if (finalMap.containsKey(key)) {

                    JSONArray list = finalMap.get(key);

                    list.put(student);


                } else {

                    JSONArray list = new JSONArray();

                    list.put(object);


                    finalMap.put(key, list);

                }

            }

最后,您可以將哈希映射轉換為您需要的任何類型。


查看完整回答
反對 回復 2023-09-27
  • 4 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號