java list根据某个字段去重,list对象去重的方法

  java list根据某个字段去重,list对象去重的方法

  

目录

简介直接去重根据对象属性去重法1:树集法2:流树集所有代码

 

  

简介

本文用示例介绍爪哇的列表(数组列表、链接列表等)的去重的方法。

 

  List去重的方法

  一共有这几种方法(按推荐顺序排列):

  JDK8的溪流的明显的

  转为哈希集(分不保持顺序和保持顺序两种)转为合框架使用retainAll/removeAll、contains、equals等基本方法

  

直接去重

包com。举例。a;导入Java。util。*;导入Java。util。溪流。收藏家;public class Demo { public static void main(String[]args){ list integer list=new ArrayList();列表。添加(1);列表。增加(3);列表。添加(2);列表。增加(3);System.out.println(源数据: 列表);系统。出去。println( stream: stream(list));系统。出去。println( hashsetwithouorder: hashsetwithoder(list));系统。出去。println( hashSetWithOrder: hashSetWithOrder(list));系统。出去。println( treeSet: treeSet(list));} //JDK1.8的溪流去重私有静态ListInteger流(list integer list){返回列表。流().独特()。收藏(收藏者。to list());} //HashSet(不保持顺序)私有静态list integer hashSetWithoutOrder(list integer list){ HashSetInteger h=new HashSetInteger(list);返回新的数组列表(h)和} //删除数组列表中重复元素,保持顺序public static list integer hashSetWithOrder(list integer list){ set integer set=new HashSetInteger();list integer new list=new ArrayListInteger();for(整数元素:列表){ if(设置。添加(元素))新列表。add(元素);}返回newList}//树集(自动排序)公共静态list integer treeSet(list integer list){ treeSet integer set=new treeSet integer(list);返回新的数组列表(集合);} }执行结果

 

  源数据:[1,3,2,3]stream: [1,3,2]hashsetwithoutore:[1,3,2]hashsetwithoder:[1,3,2]treeSet: [1,2,3]

  

根据对象属性去重

 

  

法1

 

  :TreeSet

Set<User> setByName = new TreeSet<User>((o1, o2) ->o1.getName().compareTo(o2.getName()));setByName.addAll(list);List<User> listByName = new ArrayList<>(setByName);System.out.println(listByName);//[User{name=Pepper, age=20, Phone=123}, User{name=Tony, age=20, Phone=12}] Set<User> setByNameAndAge = new TreeSet<User>((o1, o2) -> {return (o1.getName() + o1.getAge()).compareTo((o2.getName() + o2.getAge()));// return o1.getName().compareTo(o2.getName()) == 0// ? o1.getAge().compareTo(o2.getAge())// : o1.getName().compareTo(o2.getName());});setByNameAndAge.addAll(list);List<User> listByNameAndAge = new ArrayList<>(setByNameAndAge);System.out.println(listByNameAndAge);//[User{name=Pepper, age=20, Phone=123}, // User{name=Tony, age=20, Phone=12}, // User{name=Tony, age=22, Phone=1234}]

 

  

法2:stream+TreeSet

List<User> streamByNameList = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new));System.out.println(streamByNameList);//[User{name=Pepper, age=20, Phone=123}, User{name=Tony, age=20, Phone=12}] List<User> streamByNameAndAgeList = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection( () -> new TreeSet<>(Comparator.comparing(o -> o.getName() + o.getAge()))), ArrayList::new));System.out.println(streamByNameAndAgeList);//[User{name=Pepper, age=20, Phone=123}, // User{name=Tony, age=20, Phone=12}, // User{name=Tony, age=22, Phone=1234}]

 

  

所有代码

package org.example.a; import java.util.*;import java.util.stream.Collectors; class User { private String name; private Integer age; private String Phone; public User(String name, Integer age, String phone) { this.name = name; this.age = age; Phone = phone; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getPhone() { return Phone; } public void setPhone(String phone) { Phone = phone; } @Override public String toString() { return "User{" + "name=" + name +  + ", age=" + age + ", Phone=" + Phone +  + }; }} public class Demo { public static void main(String[] args) { List<User> list = new ArrayList<User>() {{ add(new User("Tony", 20, "12")); add(new User("Pepper", 20, "123")); add(new User("Tony", 22, "1234")); }}; Set<User> setByName = new TreeSet<User>((o1, o2) -> o1.getName().compareTo(o2.getName())); setByName.addAll(list); List<User> listByName = new ArrayList<>(setByName); System.out.println(listByName); //[User{name=Pepper, age=20, Phone=123}, User{name=Tony, age=20, Phone=12}] Set<User> setByNameAndAge = new TreeSet<User>((o1, o2) -> { return (o1.getName() + o1.getAge()).compareTo((o2.getName() + o2.getAge()));// return o1.getName().compareTo(o2.getName()) == 0// ? o1.getAge().compareTo(o2.getAge())// : o1.getName().compareTo(o2.getName()); }); setByNameAndAge.addAll(list); List<User> listByNameAndAge = new ArrayList<>(setByNameAndAge); System.out.println(listByNameAndAge); //[User{name=Pepper, age=20, Phone=123}, // User{name=Tony, age=20, Phone=12}, // User{name=Tony, age=22, Phone=1234}] List<User> streamByNameList = list.stream().collect(Collectors.collectingAndThen( Collectors.toCollection( () -> new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new )); System.out.println(streamByNameList); //[User{name=Pepper, age=20, Phone=123}, User{name=Tony, age=20, Phone=12}] List<User> streamByNameAndAgeList = list.stream().collect(Collectors.collectingAndThen( Collectors.toCollection( () -> new TreeSet<>(Comparator.comparing(o -> o.getName() + o.getAge()))), ArrayList::new )); System.out.println(streamByNameAndAgeList); //[User{name=Pepper, age=20, Phone=123}, // User{name=Tony, age=20, Phone=12}, // User{name=Tony, age=22, Phone=1234}] }}

到此这篇关于Java实现List去重的方法详解的文章就介绍到这了,更多相关Java List去重内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: