對於資料庫去重相當簡單,只需要在查詢語句上添加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;}@Overridepublic 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());