场景
工作中,存在这样的业务,一批需要展示的人员数据,存在名称相同的人员,相同的人员后缀+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
*/
优缺
- 只能对临时数据起作用,使用时需遍历全量的人员数据