Java 簡單實現物件資料去重處理
阿新 • • 發佈:2019-01-03
對於資料庫去重相當簡單,只需要在查詢語句上新增DISTINCT關鍵字就可以搞定,但是針對Nosql資料庫而言DISTINCT未必支援,這時候我們需要自己手動實現。這裡有一個數據不重複的最簡單的原理:字串的hashcode比較,當然記錄的唯一指標不是ID,而是資料本身,我們去掉ID再來比較是否重複就可以了。
Java 模擬程式碼:
測試結果 :package com.boonya.mongo.client; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class LoveTest { public static void main(String[] args) { List<Person> list=new ArrayList<Person>(); Person p=new Person("1", "boonya", 20); Person p2=new Person("2", "boonya", 20); Person p3=new Person("3", "boonya", 20); Person p4=new Person("4", "boonya", 20); list.add(p); list.add(p2); list.add(p3); list.add(p4); Map<String,Object> map=new HashMap<String, Object>(); for (Person person : list) { if(!map.containsKey(""+person.toString().hashCode())){ map.put(person.toString().hashCode()+"", person); } } for (Object person : map.values()) { Person uniquePerson=(Person) person; System.out.println(uniquePerson.getId()+" "+uniquePerson); } } } class Person{ private String id; private String name; private int age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(String id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } @Override public String toString() { return "Person [" + (name != null ? "name=" + name + ", " : "") + "age=" + age + "]"; } }
1 Person [name=boonya, age=20]
hash碰撞的情況本文不考慮。
Java8 去重:
List<String> unique = list.stream().distinct().collect(Collectors.toList());