人员名称相同时后缀+1

422 阅读1分钟

场景

工作中,存在这样的业务,一批需要展示的人员数据,存在名称相同的人员,相同的人员后缀+1处理,如:张三、张三2、张三3、张三4……

工具方法

/**
 * 对象判空
 * @param obj
 * @return
 */
public static boolean isEmpty(Object obj)
{
    if (null == obj)
    {
        return true;
    } else if (obj instanceof String)
    {
        String str = (String) obj;
        return str.trim().length() == 0;
    } else if (obj instanceof Collection)
    {
        Collection<?> coll = (Collection<?>) obj;
        return coll.size() == 0;
    } else if (obj instanceof Map)
    {
        Map<?, ?> map = (Map<?, ?>) obj;
        return map.size() == 0;
    } else if (obj.getClass().isArray())
    {
        return Array.getLength(obj) == 0;
    }
    return false;
}

/**
 * 获取独一无二的名称,使用名称后缀+1处理
 * @param name 人员姓名
 * @param operateId 人员ID
 * @param nameIdsMap <姓名,<人员ID>>
 * @return
 */
public static String getUniqueName(String name, String operateId, Map<String, List<String>> nameIdsMap)
{
    if (isEmpty(name))
    {
        return name;
    }
    List<String> idLi = nameIdsMap.get(name);
    if (isEmpty(idLi))
    {
        idLi = new ArrayList<>();
        idLi.add(operateId);
        nameIdsMap.put(name, idLi);
    } else if (!idLi.contains(operateId))
    {
        idLi.add(operateId);
    }
    int index = idLi.indexOf(operateId);
    if (index > 0)
    {
        name = name + (index + 1);
    }
    return name;
}

测试

public static void main(String[] args) {
    Map<String, List<String>> nameIdsMap = new HashMap<>(); // <name, <id>>
    // 实际使用时,应遍历
    System.out.println(getUniqueName("张三", "111", nameIdsMap));
    System.out.println(getUniqueName("张三", "222", nameIdsMap));
    System.out.println(getUniqueName("张三", "333", nameIdsMap));
}

// 结果:
/*
张三
张三2
张三3
*/

优缺

  • 只能对临时数据起作用,使用时需遍历全量的人员数据