java - 对来自 JSON 的数据进行分组并显示在列表中
问题描述
我有一个这样的 JSON 数据:
{
"items": [
{
"kodeHp": "C-1",
"firstName": "iman",
"lastName": "firmansyah",
"email": "ggag@gmail.com"
},
{
"kodeHp": "C-2",
"firstName": "dini",
"lastName": "yyyy",
"email": "ggag@gmail.com"
},
{
"kodeHp": "C-1",
"firstName": "tanu",
"lastName": "xxxxx",
"email": "bb@gmail.com"
},
我想在列表上显示“firstName”,但按“kodeHp”对象排序。所以我的清单看起来像这样:
{
iman: C1
tanu: C1
dini: C2
}
这是我尝试过的:
private String parseItems(String jsonResponse) {
ArrayList<HashMap<String,String>> list = new ArrayList<>();
try {
JSONObject jObj = new JSONObject(jsonResponse);
JSONArray jArray = jObj.getJSONArray("items"); //edited on gscript
for(int i = 0; i < jArray.length(); i++){
JSONObject jo = jArray.getJSONObject(i);
String kodeHp = jo.getString("kodeHp");
String firstName = jo.getString("firstName");
String lastName = jo.getString("lastName");
String email = jo.getString("email");
HashMap<String, String> item = new HashMap<>();
if (!item.containsKey(kodeHp)){
item.get(kodeHp);
}
item.put("firstName", firstName);
item.put("lastName", lastName);
item.put("email",email);
item.put("kodeHp", kodeHp);
list.add(item);
}
} catch (JSONException e){
}
adapter = new SimpleAdapter(this, list, R.layout.item_list_row,
new String[]{"firstName", "kodeHp"}, new int[] {R.id.TvFirstName,R.id.TvKodeHp});
listView.setAdapter(adapter);
loading.dismiss();
return jsonResponse;
}
它可以显示我的 JSON 数据,但还没有像我想要的那样排序。有什么建议吗?
解决方案
要对列表进行排序,您可以使用List.sort
适当Comparator
的 ,例如使用Comparator.comparing
:
list.sort(Comparator.comparing(map -> map.get("kodeHp")));
请注意,这将按 的值按字母顺序排序"kodeHp"
。另请注意,null
如果输入数据中可能存在值,则必须添加对值的处理。
如果您需要 Java8 之前的解决方案,例如对于旧的 Android 版本,您将不得不创建一个老式的匿名类,例如:
list.sort(new Comparator<Map<String,String>>() {
@Override
public int compare(Map<String,String> o1, Map<String,String> o2) {
return o1.get("kodeHp").compareTo(o2.get("kodeHp"));
}
});
推荐阅读
- ios - 无法在 iOS 中使用重置密码流检索静默访问令牌
- javascript - 具有多个条件的对象中的过滤器数组
- node.js - Nodejs connect() 连接到上游时失败(111:连接被拒绝),客户端:localhost,服务器:,请求:“GET / HTTP/1.1”,上游
- ruby-on-rails - ActiveAdmin 采用错误的 http 方法进行更新和销毁操作
- reactjs - i18n 在路径中加载 en-US
- git - Vscode 主机验证密钥失败。缩放器
- rust - 允许使用用户定义的类型创建特征对象?
- typescript - 有没有办法在我的 webview 中自动使用启用的扩展
- ios - 在 swift iOS 中自动从设备中检索应用推送令牌
- android - 通知栏和工具栏之间的空间