Как вывести название компании(и ее индекс), имеющее минимальное значение идентификатора, из JSONArray?

#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) {}