在处理元素的时候,数据是JSONArray类型,由JSONObject组成,发现有相同一样的元素,要进行去重
数据:
[
{
"xtype": "5",
"formElementAttrs": {
"DEFAULT_VALUE": {
"value": "FLOW_ID"
},
"ELEMENT_NAME": {
"value": "FLOW_ID"
},
"DEFAULT_VALUE_TYPE": {
"value": "7"
},
"ELEMENT_NAME_CN": {
"value": "流程ID"
},
"IS_EMPTY": {
"value": "F"
},
"tableName": "SYNC_122"
},
"tableFieldId": ""
},
{
"xtype": "5",
"formElementAttrs": {
"DEFAULT_VALUE": {
"value": "com.common.generator.IdGeneratorFactory.getId(\"requestId\")"
},
"ELEMENT_NAME": {
"value": "REQUEST_ID"
},
"DEFAULT_VALUE_TYPE": {
"value": "9"
},
"ELEMENT_NAME_CN": {
"value": "请求标识"
},
"IS_EMPTY": {
"value": "F"
},
"tableName": "SYNC_122"
},
"tableFieldId": ""
},
{
"xtype": "5",
"formElementAttrs": {
"DEFAULT_VALUE": {
"value": "FLOW_ID"
},
"ELEMENT_NAME": {
"value": "FLOW_ID"
},
"DEFAULT_VALUE_TYPE": {
"value": "7"
},
"ELEMENT_NAME_CN": {
"value": "流程ID"
},
"IS_EMPTY": {
"value": "F"
},
"tableName": "SYNC_122"
},
"tableFieldId": ""
},
{
"xtype": "5",
"formElementAttrs": {
"DEFAULT_VALUE": {
"value": "com.common.generator.IdGeneratorFactory.getId(\"requestId\")"
},
"ELEMENT_NAME": {
"value": "REQUEST_ID"
},
"DEFAULT_VALUE_TYPE": {
"value": "9"
},
"ELEMENT_NAME_CN": {
"value": "请求标识"
},
"IS_EMPTY": {
"value": "F"
},
"tableName": "SYNC_122"
},
"tableFieldId": ""
}
]
目标:去除重复的内容
1,直接用java8 distinct
代码:
public static JSONArray distincTheSame(JSONArray elements) {
JSONArray distinctArr = new JSONArray();
List<JSONObject> distinctList = ListUtils.emptyIfNull(elements).stream().map((e) -> (JSONObject) e).distinct().collect(Collectors.toList());
distinctArr.addAll(distinctList);
return distinctArr;
}
测试:
public static void main(String args[]) {
JSONArray distinctArr = distincTheSame(initDataTheSame());
System.out.println("=========== the same ===========");
System.out.println(distinctArr.toJSONString());
distinctArr = distincTheSame(initDataDiffernt());
System.out.println("=========== the same different ===========");
System.out.println(distinctArr.toJSONString());
distinctArr = distincDiffernet(initDataDiffernt());
System.out.println("=========== different ===========");
System.out.println(distinctArr.toJSONString());
}
public static JSONArray initDataTheSame() {
String data = "[{\"xtype\":\"5\",\"formElementAttrs\":{\"DEFAULT_VALUE\":{\"value\":\"FLOW_ID\"},\"ELEMENT_NAME\":{\"value\":\"FLOW_ID\"},\"DEFAULT_VALUE_TYPE\":{\"value\":\"7\"},\"ELEMENT_NAME_CN\":{\"value\":\"流程ID\"},\"IS_EMPTY\":{\"value\":\"F\"},\"tableName\":\"SYNC_122\"},\"tableFieldId\":\"\"},{\"xtype\":\"5\",\"formElementAttrs\":{\"DEFAULT_VALUE\":{\"value\":\"com.common.generator.IdGeneratorFactory.getId(\\\"requestId\\\")\"},\"ELEMENT_NAME\":{\"value\":\"REQUEST_ID\"},\"DEFAULT_VALUE_TYPE\":{\"value\":\"9\"},\"ELEMENT_NAME_CN\":{\"value\":\"请求标识\"},\"IS_EMPTY\":{\"value\":\"F\"},\"tableName\":\"SYNC_122\"},\"tableFieldId\":\"\"},{\"xtype\":\"5\",\"formElementAttrs\":{\"DEFAULT_VALUE\":{\"value\":\"FLOW_ID\"},\"ELEMENT_NAME\":{\"value\":\"FLOW_ID\"},\"DEFAULT_VALUE_TYPE\":{\"value\":\"7\"},\"ELEMENT_NAME_CN\":{\"value\":\"流程ID\"},\"IS_EMPTY\":{\"value\":\"F\"},\"tableName\":\"SYNC_122\"},\"tableFieldId\":\"\"},{\"xtype\":\"5\",\"formElementAttrs\":{\"DEFAULT_VALUE\":{\"value\":\"com.common.generator.IdGeneratorFactory.getId(\\\"requestId\\\")\"},\"ELEMENT_NAME\":{\"value\":\"REQUEST_ID\"},\"DEFAULT_VALUE_TYPE\":{\"value\":\"9\"},\"ELEMENT_NAME_CN\":{\"value\":\"请求标识\"},\"IS_EMPTY\":{\"value\":\"F\"},\"tableName\":\"SYNC_122\"},\"tableFieldId\":\"\"}]";
return JSONArray.parseArray(data);
}
结果:
=========== the same ===========
[{"xtype":"5","formElementAttrs":{"DEFAULT_VALUE":{"value":"FLOW_ID"},"ELEMENT_NAME":{"value":"FLOW_ID"},"DEFAULT_VALUE_TYPE":{"value":"7"},"ELEMENT_NAME_CN":{"value":"流程ID"},"IS_EMPTY":{"value":"F"},"tableName":"SYNC_122"},"tableFieldId":""},{"xtype":"5","formElementAttrs":{"DEFAULT_VALUE":{"value":"com.common.generator.IdGeneratorFactory.getId(\"requestId\")"},"ELEMENT_NAME":{"value":"REQUEST_ID"},"DEFAULT_VALUE_TYPE":{"value":"9"},"ELEMENT_NAME_CN":{"value":"请求标识"},"IS_EMPTY":{"value":"F"},"tableName":"SYNC_122"},"tableFieldId":""}]
不同
如果内容不是完全一样的,比如数据变成了
[
{
"xtype": "5",
"formElementAttrs": {
"DEFAULT_VALUE": {
"value": "FLOW_ID"
},
"ELEMENT_NAME": {
"value": "FLOW_ID"
},
"DEFAULT_VALUE_TYPE": {
"value": "7"
},
"ELEMENT_NAME_CN": {
"value": "流程ID"
},
"IS_EMPTY": {
"value": "F"
},
"tableName": "SYNC_122"
},
"tableFieldId": 363021235
},
{
"xtype": "5",
"formElementAttrs": {
"DEFAULT_VALUE": {
"value": "com.common.generator.IdGeneratorFactory.getId(\"requestId\")"
},
"ELEMENT_NAME": {
"value": "REQUEST_ID"
},
"DEFAULT_VALUE_TYPE": {
"value": "9"
},
"ELEMENT_NAME_CN": {
"value": "请求标识"
},
"IS_EMPTY": {
"value": "F"
},
"tableName": "SYNC_122"
},
"tableFieldId": 363021236
},
{
"xtype": "5",
"formElementAttrs": {
"DEFAULT_VALUE": {
"value": "FLOW_ID"
},
"ELEMENT_NAME": {
"value": "FLOW_ID"
},
"DEFAULT_VALUE_TYPE": {
"value": "7"
},
"ELEMENT_NAME_CN": {
"value": "流程ID"
},
"IS_EMPTY": {
"value": "F"
},
"tableName": "SYNC_122"
},
"tableFieldId": 363021237
},
{
"xtype": "5",
"formElementAttrs": {
"DEFAULT_VALUE": {
"value": "com.common.generator.IdGeneratorFactory.getId(\"requestId\")"
},
"ELEMENT_NAME": {
"value": "REQUEST_ID"
},
"DEFAULT_VALUE_TYPE": {
"value": "9"
},
"ELEMENT_NAME_CN": {
"value": "请求标识"
},
"IS_EMPTY": {
"value": "F"
},
"tableName": "SYNC_122"
},
"tableFieldId": 363021238
}
]
再调用相同方法就不行了。 这时候就要根据指定值进行过滤。 保留前面的,去掉后面重复的内容。
2,根据指定值进行过滤
代码:
public static JSONArray distincDiffernet(JSONArray elements) {
List<String> fieldNames = new ArrayList<>();
JSONArray distinctArr = new JSONArray();
ListUtils.emptyIfNull(elements).stream().map((e) -> (JSONObject)e).forEach(e -> {
String fileName = e.getJSONObject("formElementAttrs").getJSONObject("ELEMENT_NAME").getString("value");
if(!fieldNames.contains(fileName)){
fieldNames.add(fileName);
distinctArr.add(e);
}
});
return distinctArr;
}
测试:
public static void main(String args[]) {
distinctArr = distincDiffernet(initDataDiffernt());
System.out.println("=========== different ===========");
System.out.println(distinctArr.toJSONString());
}
public static JSONArray initDataDiffernt(){
String data = "[{\"xtype\":\"5\",\"formElementAttrs\":{\"DEFAULT_VALUE\":{\"value\":\"FLOW_ID\"},\"ELEMENT_NAME\":{\"value\":\"FLOW_ID\"},\"DEFAULT_VALUE_TYPE\":{\"value\":\"7\"},\"ELEMENT_NAME_CN\":{\"value\":\"流程ID\"},\"IS_EMPTY\":{\"value\":\"F\"},\"tableName\":\"SYNC_122\"},\"tableFieldId\":363021235},{\"xtype\":\"5\",\"formElementAttrs\":{\"DEFAULT_VALUE\":{\"value\":\"com.common.generator.IdGeneratorFactory.getId(\\\"requestId\\\")\"},\"ELEMENT_NAME\":{\"value\":\"REQUEST_ID\"},\"DEFAULT_VALUE_TYPE\":{\"value\":\"9\"},\"ELEMENT_NAME_CN\":{\"value\":\"请求标识\"},\"IS_EMPTY\":{\"value\":\"F\"},\"tableName\":\"SYNC_122\"},\"tableFieldId\":363021236},{\"xtype\":\"5\",\"formElementAttrs\":{\"DEFAULT_VALUE\":{\"value\":\"FLOW_ID\"},\"ELEMENT_NAME\":{\"value\":\"FLOW_ID\"},\"DEFAULT_VALUE_TYPE\":{\"value\":\"7\"},\"ELEMENT_NAME_CN\":{\"value\":\"流程ID\"},\"IS_EMPTY\":{\"value\":\"F\"},\"tableName\":\"SYNC_122\"},\"tableFieldId\":363021237},{\"xtype\":\"5\",\"formElementAttrs\":{\"DEFAULT_VALUE\":{\"value\":\"com.common.generator.IdGeneratorFactory.getId(\\\"requestId\\\")\"},\"ELEMENT_NAME\":{\"value\":\"REQUEST_ID\"},\"DEFAULT_VALUE_TYPE\":{\"value\":\"9\"},\"ELEMENT_NAME_CN\":{\"value\":\"请求标识\"},\"IS_EMPTY\":{\"value\":\"F\"},\"tableName\":\"SYNC_122\"},\"tableFieldId\":363021238}]";
return JSONArray.parseArray(data);
}
结果:
=========== different ===========
[{"xtype":"5","formElementAttrs":{"DEFAULT_VALUE":{"value":"FLOW_ID"},"ELEMENT_NAME":{"value":"FLOW_ID"},"DEFAULT_VALUE_TYPE":{"value":"7"},"ELEMENT_NAME_CN":{"value":"流程ID"},"IS_EMPTY":{"value":"F"},"tableName":"SYNC_122"},"tableFieldId":363021235},{"xtype":"5","formElementAttrs":{"DEFAULT_VALUE":{"value":"com.common.generator.IdGeneratorFactory.getId(\"requestId\")"},"ELEMENT_NAME":{"value":"REQUEST_ID"},"DEFAULT_VALUE_TYPE":{"value":"9"},"ELEMENT_NAME_CN":{"value":"请求标识"},"IS_EMPTY":{"value":"F"},"tableName":"SYNC_122"},"tableFieldId":363021236}]
总结:
对于JSONArray的过滤,如果子元素相同,可以用java8直接用distinct进行去重。如果内容有差别的,根据需求,用指定内容的值进行去重