场景问题:在DB中我们可能会对数据的ID进行拼接,有时会存在部分ID相同的情况。此时需要对查询出来的这个拼接数据(type:String)进行去重。
实现:此处采用JAVA8的Stream()操作进行实现,做个记录,方便下次使用。
CODE
在本业务中拼接的ID数据一般使用",“和”_"作为拼接符,所以code中的delimiter是写死的两种情况,后续待优化。
去重数据:
- String value1 = “aa,bb,cc,aa,dd,ee,aa,”
- String value2 = “12_15_30_12_100_1_58_90_210”
》执行结果如下:
1) “aa,bb,cc,dd,ee”
2) “1_12_15_30_58_90_100_210”
private String removeDuplicateData(String value) {
//工具类判断字符串非空
if (CommonUtil.isEmptyString(value)) {
retun null;
}
String delimiter = value.contains("_") ? "_":",";
String lastCharacter = value.substring(value.length()-1);
if (lastCharacter.equals(delimiter)) {
value = value.substring(0,value.length()-1);
}
if (value.equals(delimiter)) {
return null;
}
List<String> targetList = Arrays.asList(value.split(delimiter));
//JAVA8的stream()操作,sorted()用来排序,distinct()用来去重
return targetList.stream().sorted(Comparator.comparing(String::hashCode)).distinct().collect(Collectors.joining(delimiter));
}
这个方法由于在业务中侧重对数字字符串进行去重排序,字符的排序建议自己测试通过后再进行使用。