想学习架构师构建流程请跳转:Java架构师系统架构设计
/**
* 循环list中的所有元素然后删除重复
* @param list 待去重的list
* @return 去重后的list
*/
public static <T> List<T> removeDuplicate(List<T> list){
for(int i=0;i<list.size()-1;i++){
for(int j=list.size()-1;j>i;j--){
if (list.get(j).equals(list.get(i))){
list.remove(j);
}
}
}
return list;
}
/**
* 通过HashSet去重
* @param list 待去重的list
* @return 去重后的list
*/
public static <T> List<T> removeDuplicateHashSet(List<T> list){
HashSet<T> hs = new HashSet<>(list);
list.clear();
list.addAll(hs);
return list;
}
/**
* 删除List中重复元素,并保持顺序
* @param list 待去重的list
* @return 去重后的list
*/
public static <T> List<T> removeDuplicateKeepOrder(List<T> list){
Set set = new HashSet();
List<T> newList = new ArrayList<>();
for (T element : list) {
//set能添加进去就代表不是重复的元素
if (set.add(element)) newList.add(element);
}
list.clear();
list.addAll(newList);
return list;
}
/**
* 利用list.contain() 去重
* @param list
* @return
*/
public static <T> List<T> removeDuplicateContain(List<T> list){
List<T> listTemp = new ArrayList<>();
for (T aList : list) {
if (!listTemp.contains(aList)) {
listTemp.add(aList);
}
}
return listTemp;
}
删除的时候size或者长度也在发生变化,这样会造成少删除,也可用Stream流进行过滤删除
List filterList = list.stream().filter(user -> user.getAge() >= 40) .collect(toList());
例子:
JSONObject jsonObject = JSONObject.parseObject(forEntity.getBody());
String content = jsonObject.getString("content");
JSONArray jsonArray = JSONObject.parseArray(content);
for (int i = jsonArray.size() - 1; i >= 0; i--) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
String caseId = jsonObject1.getString("caseId");
QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.eq("user_id",caseInfoQueryParam.getUserId());
queryWrapper.eq("case_id",caseId);
queryWrapper.last("limit 1");
CaseInfo caseInfo = caseInfoMapper.selectOne(queryWrapper);
logger.info("案件绑定详情去重的案件->{}",caseInfo);
if (caseInfo!=null){
jsonArray.remove(i);
}
}
分组
classEntities.stream().collect(Collectors.groupingBy(ClassEntity::getGrade));
java8去重(根据年级和专业,当年级和专业都相同的情况下看做是重复数据)
List<ClassEntity> distinctClass = classEntities.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));
通过hashSet去重(如将classNames去重):该种去重是bean完全相同的时候算重复数据
List<String> classNameList = new ArrayList(new HashSet(classNames));
因为stream遍历的底层还是迭代器所以就不能边遍历边删除会出现异常ConcurrentModificationException
,所以用传统for循环删除,一种删除是倒着删,另一种就是删除后重新倒退一位标志位
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("111");
arrayList.add("222");
// arrayList.stream().forEach(s -> {
// arrayList.remove(s);
// System.out.println(arrayList.size());
// }
// );
for (int i = 0; i < arrayList.size(); i++) {
arrayList.remove(i);
i--;
}
System.out.println(arrayList);
}