我有一个要求,我必须将重复值合并到单个记录中。例如
CNTCT_CD EMP_ID
1 2
2 3
3 2
5 2
4 3
我想用这种格式。
CNTCT_CD EMP_ID
1,3,5 2
2,4 3
我该怎么做以及哪种收藏更适合在这里使用。我是这个论坛的新手,也是java的
答案 0 :(得分:2)
使用HashMap<Integer, StringBuilder>
key = EMP_ID(整数;字符串,如果是字母数字)
value =逗号分隔CNTCT_CD值
HashMap<Integer, StringBuilder> map = new HashMap<Integer, StringBuilder>();
//Assuming that you populate List<Integer> idList yourself
for (Integer id : idList)
{
StringBuilder builder = null;
if (map.containsKey(id))
{
builder = map.get(id);
builder.append(",");
}
else
{
StringBuilder builder = new StringBuilder();
}
builder.append("<respective-value>");
}
答案 1 :(得分:0)
如果您的意思是使用数据结构,我想最好的选择是Hash Map,其中EMP_ID是关键。当您尝试插入元素并且已经存在具有该键的元素时,将其附加到现有元素
EDIT 假设您的对象是ABC,它可能看起来像这样,取决于您想要如何对重复项进行分组:
HashMap<String, Group of ABC> map = new HashMap<String, Group of ABC>();
void insert (ABC item){
<Group of ABC> existing = map.get(item.EMP_ID);
if (existing == null){
G = new <Group of ABC>()
map.put(ABC.EMP_ID, G);
} else {
existing.append(ABC); //Here comes to you how to merge 2 items of this kind (append strings, use a list...)
map.put(item.EMP_ID, existing);
}
}
答案 2 :(得分:0)
也可以使用HashMap<String, Set<String>>
key = String EMP_ID
value =字符串集(CNTCT_CDs
)
代码:
只需创建一个类来表示像
这样的记录CNTCT_CD EMP_ID
1 2
public class Record {
private String empId;
private String cntctId;
//setters and getters
//constructors
}
通过创建记录列表来处理所有记录,如下所示: Set用于消除重复的cntct id
List<Record> records = new ArrayList<>();
records.add(new Record("1", "2"));
records.add(new Record("2", "3"));
records.add(new Record("3", "2"));
records.add(new Record("5", "2"));
records.add(new Record("4", "3"));
Map<String, Set<String>> map = new HashMap<String, Set<String>>();
//Storing records as per your desired format
for (Record record : records) {
//if its a new key, add key and value(in a Set)
if (!map.keySet().contains(record.getEmpId())) {
Set<String> cntctIds = new HashSet<String>();
cntctIds.add(record.getCntctId());
map.put(record.getEmpId(), cntctIds);
//key already added, just add the value to the added Set
} else {
map.get(record.getEmpId()).add(record.getCntctId());
}
}
嘿,您可以使用Integer
代替上面String
。
多数民众赞成!
答案 3 :(得分:0)
你不清楚你有什么问题,但我会试着猜测
假设我们有2个数组:cnctd_cd
和emp_id
:
int[] cntct_cd = {1, 2, 3, 5, 4};
int[] emp_id = {2, 3, 2, 2, 3};
你需要通过emp_id组合所有cntct_cd,这样我们就可以为员工找到他所有的cntct_cd(无论它意味着什么)。我建议遵循algoritm:
//define map that will contain list of cntct_cd by emp_id
Map<Integer, List<Integer>> grouped = ...;
// for each item in arrays do following:
// check if grouped contains current emp_id
// if not, put new empty list for current emp_id to grouped map.
// get list from grouped by emp_id and add current cntct_cd to this list
// At the end you'll get map of all cntct_cd combined by emp_id
有点伪代码:)