Java List集合去重的多种方法


1 循环list中的所有元素然后删除重复

/**
* 循环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;
}

2 通过HashSet去重

/**
 * 通过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;
}

3 删除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;
}

4 利用list.contain() 去重

/**
 * 利用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;
}

5 注意事项

删除的时候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);
            }
        }
posted @ 2021-06-12 12:13  赵广陆  阅读(381)  评论(0编辑  收藏  举报