java中 List集合对象去重及按属性去重的8种方法
List集合对象去重及按属性去重的8种方法
最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大。基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华。所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结。
- 总结java中创建并写文件的5种方式
- 总结java从文件中读取数据的6种方法
- 总结java创建文件夹的4种方法及其优缺点
- 总结java中删除文件或文件夹的7种方法
- 总结java中文件拷贝剪切的5种方式
比如之前我已经写了上面的这些内容,如果对java基础知识总结系列感兴趣的同学可以关注我的博客(文末给出我的博客地址)。
一、本文梗概
下文中四种方法对List中的String类型以集合元素对象为单位整体去重。如果你的List放入的是Object对象,需要你去实现对象的equals和hashCode方法,去重的代码实现方法和
List去重是一样的。
第一种方法
是大家最容易想到的,先把List数据放入Set,因为Set数据结构本身具有去重的功能,所以再将SET转为List之后就是去重之后的结果。这种方法在去重之后会改变原有的List元素顺序,因为HashSet本身是无序的,而TreeSet排序也不是List种元素的原有顺序。
@Test
void testRemove1() {
/*Set set = new HashSet<>(list);
List newList = new ArrayList<>(set);*/
//去重并排序的方法(如果是字符串,按字母表排序。如果是对象,按Comparable接口实现排序)
//List newList = new ArrayList<>(new TreeSet<>(list));
//简写的方法
List<String> newList = new ArrayList<>(new HashSet<>(list));
System.out.println( "去重后的集合: " + newList);
控制台打印结果如下:
去重后的集合: [kobe, james, zimug, curry]
第二种方法
使用就比较简单,先用stream方法将集合转换成流,然后distinct去重,最后在将Stream流collect收集为List。
@Test
void testRemove2() {
List<String> newList = list.stream().distinct().collect(Collectors.toList());
System.out.println( "去重后的集合: " + newList);
控制台打印结果如下:
去重后的集合: [kobe, james, curry, zimug]
第三种方法
这种方法利用了set.add(T),如果T元素已经存在集合中,就返回false。利用这个方法进行是否重复的数据判断,如果不重复就放入一个新的newList中,这个newList就是最终的去重结果
//三个集合类list、newList、set,能够保证顺序
@Test
void testRemove3() {
Set set = new HashSet<>();
List newList = new ArrayList<>();
for (String str :list) {
if(set.add(str)){ //重复的话返回false
newList.add(str);
System.out.println( "去重后的集合: " + newList);
控制台打印结果和第二种方法一致。
第四种方法
这种方法已经脱离了使用Set集合进行去重的思维,而是使用newList.contains(T)方法,在向新的List添加数据的时候判断这个数据是否已经存在,如果存在就不添加,从而达到去重的效果。
//优化 List、newList、set,能够保证顺序
@Test
void testRemove4() {
List<String> newList = new ArrayList<>();
for (String cd:list) {
if(!newList.contains(cd)){ //主动判断是否包含重复元素
newList.add(cd);
System.out.println( "去重后的集合: " + newList);
控制台打印结果和第二种方法一致。
三、按照集合元素对象属性去重
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端分离RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
- 《VUE深入浅出系列》