我想比较两个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。