人脸信息集合去重

xiaoxiao2021-02-28  24

问题:

人脸识别返回一个识别集合,元素包含三个字段trackId,face,name。

每条数据均有trackId,且有可能会重复;不一定有name和face。

我们认为同一个trackId的条目 均为重复信息,需求是 去除重复trackId,并保证保留下的那条信息最全,优先考虑name。

源数据形式如下:

遇到这种问题,建议在Person中加一个字段来标识自己的信息完整性,

/** * Created by ylWang on 2018/7/7 17:28. */ public class Person { private int trackId; private String face = ""; private String name = ""; private int priority;//用于标识数据完整性,以确定优先级 public int getPriority() { return priority; } public static boolean isEmpty(CharSequence str) { return str == null || str.length() == 0; } public int getTrackId() { return trackId; } public void setTrackId(int trackId) { this.trackId = trackId; } public String getFace() { return face == null ? "" : face; } public void setFace(String face) { if (!isEmpty(face)) priority += 1; this.face = face; } public void setName(String name) { if (!isEmpty(name)) priority += 2; this.name = name; } public String getName() { return name == null ? "" : name; } }   /** * @param srcList 源数据,带有重复的trackId的person集合 * @return 去重复后的person集合 */ private List<Person> getSmartList(List<Person> srcList) { List<Integer> idList = new ArrayList<>();//存储不重复的trackId List<Person> desList = new ArrayList<>();//存储不重复的Person for (Person person : srcList) { int trackId = person.getTrackId(); int idIndex = idList.indexOf(trackId); if (idIndex < 0) {//新的trackId先添加到集合里 idList.add(trackId); desList.add(person); } else {//比较同一个trackId中,数据的完整性,进行替换 if (person.getPriority() > desList.get(idIndex).getPriority()) { desList.remove(idIndex); if (idIndex > desList.size() - 1) desList.add(person);//末尾追加 else desList.add(idIndex, person); } } } return desList; }

 

去重效果如下:

 

转载请注明原文地址: https://www.6miu.com/read-2628709.html

最新回复(0)