我有一个要求,我必须将重复的值合并到单个记录中。例如
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的新手
我有一个要求,我必须将重复的值合并到单个记录中。例如
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的新手
利用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>");
}
也可以使用HashMap<String, Set<String>>
键=字符串EMP_ID
值 = 字符串集(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
。而已!
你不清楚你有什么,但我会试着猜测。
假设我们有 2 个数组:cnctd_cd
和emp_id
:
int[] cntct_cd = {1, 2, 3, 5, 4};
int[] emp_id = {2, 3, 2, 2, 3};
您需要将所有 cntct_cd 与 emp_id 结合起来,这样我们就可以为员工找到他的所有 cntct_cd(不管它是什么意思)。我建议遵循算法:
//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
这有点伪代码:)
如果您的意思是要使用哪种数据结构,我想最好的选择是哈希映射,其中 EMP_ID 是键。当您尝试插入一个元素并且已经存在具有该键的元素时,将其附加到现有的元素
编辑假设您的对象是 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);
}
}