List集合中刪除屬性(一個或者多個屬性)相同的物件返回List且根據物件屬性進行排序輸出
阿新 • • 發佈:2018-12-20
在資料庫中某些資料是重複的,通過mybatis對映成不同的物件。導致不同的物件包含相同的屬性。這也是資料重複的一種。下面是我在處理一個屬性或者多個屬性相同時採用的方法。當然你可以採用其他的方法。比較蠢的方法是兩個for迴圈。但是對於資料的刪除是很容易出現異常的。因此我採用的是map的鍵值對的方法。不多說,直接上程式碼,程式碼不做過多解釋,相信大家可以看懂,主要是這個思想,我感覺不錯!
在這之前你需要模仿一個數據。建一People類。
public class People { private String name; private String phone; private String user; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } }
其次新建多個物件,物件的屬性是重複的。如下我建立的一樣,因人而異。
這樣的話就已經仿造了一包含重複資料不同物件的List集合了。People p1 = new People(); p1.setName("張三"); p1.setPhone("1102"); p1.setUser("法人代表"); People p2 = new People(); p2.setName("張三"); p2.setPhone("110"); p2.setUser("法人代表"); People p3 = new People(); p3.setName("張四"); p3.setPhone("110"); p3.setUser("法人代表"); People p4 = new People(); p4.setName("張三"); p4.setPhone("1120"); p4.setUser("法人代表"); People p5 = new People(); p5.setName("張一"); p5.setPhone("110"); p5.setUser("法人代表"); List<People> peopleList = new ArrayList<>(); peopleList.add(p1); peopleList.add(p2); peopleList.add(p3); peopleList.add(p4); peopleList.add(p5);
一。過濾單個屬性重複的物件
List<People> returnList = new ArrayList<>(); Map<String, People> map = new HashMap<>(); for (People people : peopleList) { System.out.println("people.getName() = " + people.getName() ); String key = people.getName() ;對應的key值為使用者名稱,利用map中鍵的唯一性特點。if (map.containsKey(key)) { continue; } map.put(key, people); } Iterator<Map.Entry<String, People>> it = map.entrySet().iterator(); if (it.hasNext()) { Map.Entry<String, People> entry = it.next(); returnList.add(entry.getValue()); } System.out.println("返回的不重複集合大小為" + returnList.size()); for (People E : returnList ) { System.out.println("E.getName() = " + E.getName()); } }
二。過濾多個屬性重複的物件。
List<People> returnList = new ArrayList<>(); Map<String, People> map = new HashMap<>(); for (People people : peopleList) { System.out.println("people.getName() = " + people.getName() + people.getPhone()); String key = people.getName() + people.getPhone(); if (map.containsKey(key)) { continue; } map.put(key, people); } Iterator<Map.Entry<String, People>> it = map.entrySet().iterator(); if (it.hasNext()) { Map.Entry<String, People> entry = it.next(); returnList.add(entry.getValue()); } System.out.println("返回的不重複集合大小為" + returnList.size()); for (People E : returnList ) { System.out.println("E.getName() = " + E.getName()); } }差別就在於key值不同。
個人感覺這中方法去重的話,避免了刪除的步驟,更多的是採用put。當然這只是針對單一執行緒的。
三。List集合根據物件的屬性進行排序
public void testR() { List<Student> list = new ArrayList<>(); //建立3個學生物件,年齡分別是20、19、21,並將他們依次放入List中 Student s1 = new Student(); s1.setAge(20); Student s2 = new Student(); s2.setAge(19); Student s3 = new Student(); s3.setAge(21); list.add(s1); list.add(s2); list.add(s3); System.out.println("排序前:" + list); Collections.sort(list, new Comparator<Student>() { /* * int compare(Student o1, Student o2) 返回一個基本型別的整型, * 返回負數表示:o1 小於o2, * 返回0 表示:o1和o2相等, * 返回正數表示:o1大於o2。 */ public int compare(Student o1, Student o2) { //按照學生的年齡進行升序排列 if (o1.getAge() > o2.getAge()) { return 1; } if (o1.getAge() == o2.getAge()) { return 0; } return -1; } }); System.out.println("排序後:" + list); }