JSON: Array & Compare - PullRequest
       8

JSON: Array & Compare

0 голосов
/ 19 февраля 2019

У меня есть набор массива JSON:

listSession: [h0y78u93, h0y78u93, h0y78u93, h0y78u93, h0y78u93, 9i88u93, 9i88u93, 9i88u93, 9i88u93, 9i88u93]

Я создал массив, используя следующий код:

ArrayList<String> listSession = new ArrayList<String>(); 
            for(int u=1; u < k+1; u++) {
                String str = Integer.toString(u);

                JSONArray arrTime=(JSONArray)mergedJSON2.get(str);
                JSONObject objSession;
                StringsessionName;
                for (Object ro : arrTime) {

                    objSession = (JSONObject) ro;
                    sessionName = String.valueOf(objSession.get("sessionID"));

                    listSession.add(sessionName);
                }
            }

Могу ли я получить ваш совет или мнение о том, какЯ собираюсь сравнить значение каждого из атрибутов в списке.Если это то же самое, я должен это как ОДИН.В приведенном выше примере значение должно быть только ДВА вместо ДЕСЯТИ.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Если вы в порядке, используя Java 8 , то вы можете использовать сокращенную реализацию, например:

Пример:

ArrayList<String> data = new ArrayList<String>(Arrays.asList("A", "A", "A", "B", "B", "B"));

// This will be required if your target SDK < Android N
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    List<String> uniqueData = data.stream().distinct().collect(Collectors.toList()); // Results ["A", "B"]
}
0 голосов
/ 19 февраля 2019

Я бы рекомендовал использовать Set over ArrayList здесь.Вы можете использовать ArrayList и проверить список, содержит ли он элемент, и добавить его.ArrayList.contains () занимает O (n) времени, потому что он поддерживает динамический массив внутри.Где HashSet или TreeSet могут выполнить эту проверку в O (1), и вам также не нужно это сравнивать.

Set<String> setSession = new HashSet<String>(); 
        for(int u=1; u < k+1; u++) {
            String str = Integer.toString(u);
            JSONArray arrTime=(JSONArray)mergedJSON2.get(str);
            JSONObject objSession;
            StringsessionName;
            for (Object ro : arrTime) {

                objSession = (JSONObject) ro;
                sessionName = String.valueOf(objSession.get("sessionID"));
                setSession.add(sessionName);
            }
        }
0 голосов
/ 19 февраля 2019

Вы можете использовать метод Arraylist.contains(), как показано ниже:

ArrayList<String> listSession = new ArrayList<String>(); 
for(int u=1; u < k+1; u++) {
    String str = Integer.toString(u);

    JSONArray arrTime=(JSONArray)mergedJSON2.get(str);
    JSONObject objSession;
    StringsessionName;
    for (Object ro : arrTime) {

        objSession = (JSONObject) ro;
        sessionName = String.valueOf(objSession.get("sessionID"));

        if (!listSession.contains(sessionName)) {
            listSession.add(sessionName);
        }
    }
}

ИЛИ

Вы можете использовать реализацию Set , которая не допускает дублирование значений вместоArrayList.Нет необходимости явно сравнивать.

// initialize
Set sessionsSet = new HashSet(); 
//add like below
sessionsSet.add(sessionName);
sessionsSet.size() // getting the length which should be what you expect to be 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...