#java #arrays #for-loop
Вопрос:
JSONArray
В моем приложении, которое я получаю из онлайн-API, каждый объект в JSONArray
оф "production_companies"
представляет компанию, и у каждого есть имя и идентификатор.
Я хочу извлечь название компании, которое имеет минимальное значение идентификатора.
в следующем примере значение Warner Bros. Pictures
id
является самым низким 174
, поэтому я хочу вывести имя Warner Bros. Pictures
"production_companies":[
{"id":429,"name":"DC Comics"},
{"id":923,"name":"Legendary Pictures"},
{"id":9996,"name":"Syncopy"},
{"id":118865,"name":"Isobel Griffiths"},
{"id":9993,"name":"DC Entertainment"},
{"id":174,"name":"Warner Bros. Pictures"}
]
С помощью этого метода (огромное спасибо @VeKe) minId
выводится идентификатор компании , который имеет минимальное значение среди прочих, в приведенном выше примере он выводит 174
// Set Studio name
try {
JSONArray c = jObject.getJSONArray("production_companies");
Set<Integer> set = new HashSet<>();
// Extract and Find minimum id
for (int i = 0 ; i < c.length(); i ) {
JSONObject obj = c.getJSONObject(i);
int idd = obj.getInt("id");
set.add(idd);
}
int minId = Collections.min(set);
int index = set.indexOf(minId); // getting the index of minId (NOT WORKING)
JSONObject jo = c.getJSONObject(index);
movie.setStudioname(jo.getString("name")); // outputting the name of the company which has minimum ID value
} catch (JSONException e) {}
Теперь я хочу получить индекс minId
, я пытался int index = set.indexOf(minId);
, но indexOf
не могу решить.
Итак, каков наилучший метод получения индекса minId
?
Ответ №1:
JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray c = jsonObj.getJSONArray("production_companies");
Set<Integer> set = new HashSet<>();
// Extract and Find minimum id
for (int i = 0 ; i < c.length(); i ) {
JSONObject obj = c.getJSONObject(i);
int id = obj.getString("id");
set.add(id);
}
int minId = Collections.min(list);
// TODO get corresponsind name for minId
Комментарии:
1. да, я сохранил часть, чтобы получить название студии в качестве задания, чтобы вы могли попробовать
2. Привет, я устал получать индекс мини-идентификатора
int index = set.indexOf(minId);
, но он не работает, можете ли вы помочь с этим, если у вас есть время, спасибо
Ответ №2:
Проведя множество исследований, я наконец получил то, что хотел.
вот окончательный код ( немного изменив ответ @VeKe), огромное вам спасибо.
// Set Studio name
try {
JSONArray c = jObject.getJSONArray("production_companies");
ArrayList<Integer> set = new ArrayList<>();
// Extract and Find minimum id
for (int i = 0 ; i < c.length(); i ) {
JSONObject obj = c.getJSONObject(i);
int idd = obj.getInt("id");
set.add(idd);
}
// int minId = Collections.min(set);
int index = set.indexOf(Collections.min(set));
JSONObject jo = c.getJSONObject(index);
movie.setStudioname(jo.getString("name"));
} catch (JSONException e) {}