欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

人脸信息集合去重

程序员文章站 2022-04-15 14:13:10
...

问题:

人脸识别返回一个识别集合,元素包含三个字段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;
}

 

去重效果如下:

 

人脸信息集合去重

相关标签: 集合去重