我有一个表格的JSONArray:
[[{ "Country" : "IN", "count" : 10},{ "Country" : "US", "count" : 20}], [{ "Country" : "IN", "count" : 10},{ "Country" : "US", "count" : 20}], [{ "Country" : "IN", "count" : 10},{ "Country" : "US", "count" : 20}]]
我想比较上述情况中的各个字段
由于{ "Country" : "IN", "count" : 10}
等于{ "Country" : "IN", "count" : 10}
且{ "Country" : "IN", "count" : 10}
且{ "Country" : "US", "count" : 20}
等于{ "Country" : "US", "count" : 20}
和{ "Country" : "US", "count" : 20}
,我应该得到匹配结果。
但是对于下面这样的情况,我应该得到一个不匹配的结果,因为count
不匹配。
[[{ "Country" : "IN", "count" : 45},{ "Country" : "US", "count" : 60}],
[{ "Country" : "IN", "count" : 10},{ "Country" : "US", "count" : 20}],
[{ "Country" : "IN", "count" : 10},{ "Country" : "US", "count" : 20}]]
我能够将数据放入HashMap。但我无法找到方法,如何比较。
myArray
包含上述JSONArray。
int length = myArray.getJSONArray(0).length();
Map<String, Integer> cargo = new HashMap<>();
for (int j = 0; j < myArray.length(); j++) {
for (int k = 0; k < myArray.getJSONArray(j).length(); k++) {
String country = myArray.getJSONArray(j).getJSONObject(k).getString(DataConstants.COUNTRY);
Integer count = myArray.getJSONArray(j).getJSONObject(k).getInt(DataConstants.COUNT);
cargo.put(country, count);
}
}
if (cargo.size() == length) {
System.out.println("Data Matched !!");
return true;
}
else
System.out.println("Data Not Matched !!");
return false;
谢谢,
答案 0 :(得分:2)
您可以创建一个名为Country的类,您可以使用它来保存JSON数组中的数据。
class Country {
private String countryCode;
private int count;
@Override
public boolean equals(Object obj) {
// compare your properties
}
@Override
public int hashCode() {
// Calculate a int using properties
}
}
请参阅this tutorial了解如何实施equals
和hashcode
方法。
然后,您需要将JSON数组转换为java对象。看看this tutorial。
答案 1 :(得分:1)
使用两个变量创建一个Pojo对象并覆盖equals方法。
公共类国家{
private String code;
private int count;
//getters, setters
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((code == null) ? 0 : code.hashCode());
result = prime * result + count;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Country other = (Country) obj;
if (code == null) {
if (other.code != null)
return false;
} else if (!code.equals(other.code))
return false;
if (count != other.count)
return false;
return true;
}
}
现在,您可以通过更新代码来创建POJO对象的HashMap。
Country country = null;
for (int j = 0; j < myArray.length(); j++) {
for (int k = 0; k < myArray.getJSONArray(j).length(); k++) {
String country = myArray.getJSONArray(j).getJSONObject(k).getString(DataConstants.COUNTRY);
Integer count = myArray.getJSONArray(j).getJSONObject(k).getInt(DataConstants.COUNT);
country = new Country();
country.setCode(country);
country.setCount(count);
cargo.put(country); //change cargo to take country objects
}
}
获得POJO列表后,您可以执行equals,contains和所有其他奇特的操作来了解匹配。