如何使用过滤器从 jsonlist 中删除对象?
How to remove objects out a jsonlist with filters?
我想使用过滤器从数组中删除某些对象。
这是生成数组的代码(JSON 解析器)
protected Boolean doInBackground(final String... args) {
JSONParser jParser = new JSONParser();
JSONArray json = jParser.getJSONFromUrl(url);
for (int i = 0; i < json.length(); i++) {
try {
JSONObject c = json.getJSONObject(i);
String naam = c.getString("actNaam");
String type = c.getString("actType");
String datum = c.getString("actDatum");
HashMap<String, String> map = new HashMap<String, String>();
map.put("actNaam", naam);
map.put("actType", type);
map.put("actDatum", datum);
jsonlist.add(map);
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
}
这是显示前应过滤数组的代码。
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
for (int i = 0; i < jsonlist.size(); i++) {
if (wandeling == false && type == "wandeling") {
//Here we want to remove the types that have the string wandeling
//The boolean wandeling has to be false befor the items should be removed
}
if (fiets == false && type == "fiets") {
//Here we want to remove the types that have the string wandeling
}
if (excursie == false && type == "excursie") {
//Here we want to remove the types that have the string wandeling
}
}
ListAdapter adapter = new SimpleAdapter
(context, jsonlist, R.layout.list_activity,
new String[]{naam, type, datum},
new int[]{R.id.ActNaam, R.id.ActType, R.id.Actdatum});
setListAdapter(adapter);
lv = getListView();
}
我们正在根据 json 文件制作列表。该列表有 3 个项目:naam、type 和 datum。
我们希望用户能够 'filter' 通过带有按钮的列表。按钮是返回 wandeling、fiets 和 excursie 的布尔值的按钮。
因此,例如,当按钮 'wandeling' 未被单击时 (false),我们希望从数组中删除类型为 'wandeling' 的所有项目;
这些类型在 json 文件中使用如下字符串进行保护:
"actType":"wandeling"
"actType":"fiets"
"actType":"excursie"
抱歉我的英语不好,感谢您的帮助!
也许你应该使用 class 而不是地图,并使用 java8
的流 api
result = jsonlist.stream()
.filter( x -> wandling || (!x.actType.equals("wandling") )
.filter( x -> fiets || (!x.actType.equals("fiets") )
.filter( x -> excursie|| (!x.actType.equals("excursie") )
.collect(Collectors.toList())
应该是这样的
这就是我所做的,它有效!
for (int i = jsonlist.size()-1 ; i >= 0; i--) {
if (jsonlist.get(i).get(type).equals("wandeling") && wandeling == false) {
jsonlist.remove(i);
}
}
我想使用过滤器从数组中删除某些对象。
这是生成数组的代码(JSON 解析器)
protected Boolean doInBackground(final String... args) {
JSONParser jParser = new JSONParser();
JSONArray json = jParser.getJSONFromUrl(url);
for (int i = 0; i < json.length(); i++) {
try {
JSONObject c = json.getJSONObject(i);
String naam = c.getString("actNaam");
String type = c.getString("actType");
String datum = c.getString("actDatum");
HashMap<String, String> map = new HashMap<String, String>();
map.put("actNaam", naam);
map.put("actType", type);
map.put("actDatum", datum);
jsonlist.add(map);
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
}
这是显示前应过滤数组的代码。
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
for (int i = 0; i < jsonlist.size(); i++) {
if (wandeling == false && type == "wandeling") {
//Here we want to remove the types that have the string wandeling
//The boolean wandeling has to be false befor the items should be removed
}
if (fiets == false && type == "fiets") {
//Here we want to remove the types that have the string wandeling
}
if (excursie == false && type == "excursie") {
//Here we want to remove the types that have the string wandeling
}
}
ListAdapter adapter = new SimpleAdapter
(context, jsonlist, R.layout.list_activity,
new String[]{naam, type, datum},
new int[]{R.id.ActNaam, R.id.ActType, R.id.Actdatum});
setListAdapter(adapter);
lv = getListView();
}
我们正在根据 json 文件制作列表。该列表有 3 个项目:naam、type 和 datum。 我们希望用户能够 'filter' 通过带有按钮的列表。按钮是返回 wandeling、fiets 和 excursie 的布尔值的按钮。
因此,例如,当按钮 'wandeling' 未被单击时 (false),我们希望从数组中删除类型为 'wandeling' 的所有项目; 这些类型在 json 文件中使用如下字符串进行保护:
"actType":"wandeling"
"actType":"fiets"
"actType":"excursie"
抱歉我的英语不好,感谢您的帮助!
也许你应该使用 class 而不是地图,并使用 java8
的流 apiresult = jsonlist.stream()
.filter( x -> wandling || (!x.actType.equals("wandling") )
.filter( x -> fiets || (!x.actType.equals("fiets") )
.filter( x -> excursie|| (!x.actType.equals("excursie") )
.collect(Collectors.toList())
应该是这样的
这就是我所做的,它有效!
for (int i = jsonlist.size()-1 ; i >= 0; i--) {
if (jsonlist.get(i).get(type).equals("wandeling") && wandeling == false) {
jsonlist.remove(i);
}
}