原始需求如下:根据一个json数组中的元素的特定属性去重。
例如:"[{"plateNumber":"京A00001","model":"tesla90","color":"black"},{"plateNumber":"京A00001","model":"tesla90","color":"black"},{"plateNumber":"京A00001","model":"tesla90","color":"red"}]"
假设我们认为plateNumber相同的元素具有等价性,那么如上json数组可以去重为:[{"plateNumber":"京A00001","model":"tesla90","color":"black"}]
例如:"[{"plateNumber":"京A00001","model":"tesla90","color":"black"},{"plateNumber":"京A00001","model":"tesla90","color":"black"},{"plateNumber":"京A00001","model":"tesla90","color":"red"}]"
假设我们认为plateNumber相同的元素具有等价性,那么如上json数组可以去重为:[{"plateNumber":"京A00001","model":"tesla90","color":"black"}]
思路是将一个json数组映射为List<Entity>,利用Set<Entity>本身的特性去重;所以我们需要对Entity覆盖HashCode和Equals方法,为了最小化最实体对象的侵入,并将该去重作为一个通用组件使用,有如下的设计。
注:按照这个设计思路,去重时具体选择保留哪个元素是不确定且无法指定的,算是这个思路的缺陷。有新的想法,欢迎交流探讨。
1.设计一个接口,用来设置去重的依据属性。
public interface Reducible {
void