使用Gson比较两个ArrayList?

时间:2016-07-06 11:17:25

标签: java android arraylist string-comparison gson

我想比较两个ArrayList<地图<字符串,对象>>对象,但问题是我需要在不同的应用程序会话中比较它们。因此,在使用Gson将其转换为String后,我将在SharedPreferences中保存第一个ArrayList。然后我在下一个会话中查询字符串以进行比较。我尝试将其转换回ArrayList,然后将其与新会话期间生成的列表进行比较。还尝试将新列表转换为json,然后比较两个文本。但结果是一样的。以下是相关代码:

声明:

ArrayList<Map<String, Object>> tweetMapArray = new ArrayList<>();

然后用某种方法:

List<twitter4j.Status> statuses = twitter.getUserTimeline(params[0], new Paging(1, 200));
tweetMapArray.clear(); // I am also reusing it
for (twitter4j.Status status : statuses) {
    Map<String, Object> valuesToPutInMarker = new HashMap<>();
    valuesToPutInMarker.put("id", status.getId());
    valuesToPutInMarker.put("status", status.getText());
    tweetMapArray.add(valuesToPutInMarker);
}

现在在tweetMapArray中保存SharedPreferences

String jsonStr = gson.toJson(tweetMapArray);
editor = configData.edit();
editor.putString("tweetData", jsonStr);
editor.apply();

查询数据:

private boolean seeIfTheDataIsNew() {
    String dataFromSharedPreferences = configData.getString("tweetData", null);
    Type collectionType2 = new TypeToken<ArrayList<Map<String, Object>>>() {
        }.getType();

    ArrayList<Map<String, Object>> oldTweets = gson.fromJson(dataFromSharedPreferences, collectionType2);

    String jsonStr = gson.toJson(tweetMapArray);
    return jsonStr.equalsIgnoreCase(dataFromSharedPreferences);

    // OR

    return !(oldTweets.containsAll(tweetMapArray) && tweetMapArray.containsAll(oldTweets));
}

这里,最后两行中的两个方法都返回true。在测试样本中,它们应该返回false。

0 个答案:

没有答案