**My current code:
**我需要格式化它,因为已重复的Id应该是地图中的一个键,值应该在一个arraylist中。 **它应该像id一样改变它应该把键和arraylis放到地图上它应该启动键和arraylist,初始化arraylist并继续循环执行
public class Example1 {
//main method
public static void main(String args[]) {
//Employee object initiated
/*Employee class contains the variables id and name and their getter setter method*/
Employee e1 = new Employee();
Employee e2 = new Employee();
Employee e3 = new Employee();
Employee e4 = new Employee();
Employee e5 = new Employee();
Employee e6 = new Employee();
e1.setId("CG1");
e1.setName("CL1");
e2.setId("CG1");
e2.setName("CL2");
e3.setId("CG1");
e3.setName("OTH");
e4.setId("TST");
e4.setName("AGY");
e5.setId("TST");
e5.setName("CAG");
e6.setId("1.2");
e6.setName("EQU");
/* Adding Employees to an ArrayList */
List<Employee> liste = new ArrayList<Employee>();
liste.add(e1);
liste.add(e2);
liste.add(e3);
liste.add(e4);
liste.add(e5);
liste.add(e6);
Map<String, ArrayList<String>> multimap = new HashMap<String, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
System.out.println("size of liste: " + liste.size());
Employee[] et = new Employee[liste.size()];
System.out.println("Employee arry size is: " + et.length);
Iterator EmpArrayListItr = liste.iterator();
for (int k = 0; k < et.length; k++) {
System.out.println("inside for loop");
et[k] = (Employee) EmpArrayListItr.next();
System.out.println("Employee Array contents: " + et[k].getId()
+ "-" + et[k].getName());
System.out.println("object created");
if (k == 0) {
System.out.println("inside k==0 if");
String id = et[k].getId();
System.out.println("id inside k==0 if is: " + id);
list.add(et[k].getName());
}
if (k > 0) {
// et[k] = new Employee();
System.out.println("inside k>0 if");
String prevId = et[k - 1].getId();
System.out.println("previd: " + prevId);
if (et[k].getId().equals(prevId)) {
list.add(et[k].getName());
}
}
/*putting values into map*/
multimap.put(et[k].getId(), list);
System.out.println("value of k: " + k);
}
Set<Entry<String, ArrayList<String>>> entries = multimap.entrySet();
for (Entry entry : entries) {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
}
}
/* O/P currently I am getting:
TST/[CL1, CL2, OTH, CAG]
CG1/[CL1, CL2, OTH, CAG]
1.2/[CL1, CL2, OTH, CAG]
O/P expected:
CG1/[CL1, CL2, OTH]
TST/[AGY,CAG]
1.2/[EQU] */
答案 0 :(得分:0)
为什么要让它变得复杂时简单?
首先摆脱所有不必要的数组和arraylists。您需要的所有信息都已包含在名为liste的Employees列表中。 第二点:现在打印一些细节可能会有所帮助,但不要打印每一个细节。您可以调试代码。调试为您提供了非常详细的执行视图。
您的代码可能如下所示:
public class Example1 {
public static void main(String args[]) {
Employee e1 = new Employee();
Employee e2 = new Employee();
Employee e3 = new Employee();
Employee e4 = new Employee();
Employee e5 = new Employee();
Employee e6 = new Employee();
e1.setId("CG1");
e1.setName("CL1");
e2.setId("CG1");
e2.setName("CL2");
e3.setId("CG1");
e3.setName("OTH");
e4.setId("TST");
e4.setName("AGY");
e5.setId("TST");
e5.setName("CAG");
e6.setId("1.2");
e6.setName("EQU");
List<Employee> liste = new ArrayList<>();
liste.add(e1);
liste.add(e2);
liste.add(e3);
liste.add(e4);
liste.add(e5);
liste.add(e6);
Map<String, ArrayList<String>> multimap = new HashMap<>();
for(Employee emp : liste){
// if id not yet in keyset put it as a new key and create a new list for the values
if(!multimap.keySet().contains(emp.getId())){
multimap.put(emp.getId(), new ArrayList<>());
// add the name to valueslist
multimap.get(emp.getId()).add(emp.getName());
}
// if id already exists you only need to add name to list
else{
multimap.get(emp.getId()).add(emp.getName());
}
}
for(Entry entry : multimap.entrySet()){
System.out.println(entry.getKey() + "/" + entry.getValue());
}
}
}
如果在Employee类中使用构造函数,您仍然可以保存一些行,如下所示:
public Employee(String id, String name) {
this.id = id;
this.name = name;
}
使您的代码更短:
public static void main(String args[]) {
Employee e1 = new Employee("CG1","CL1");
Employee e2 = new Employee("CG1","CL2");
Employee e3 = new Employee("CG1","OTH");
Employee e4 = new Employee("TST","AGY");
Employee e5 = new Employee("TST","CAG");
Employee e6 = new Employee("1.2","EQU");
List<Employee> liste = new ArrayList<>();
liste.add(e1);
liste.add(e2);
liste.add(e3);
liste.add(e4);
liste.add(e5);
liste.add(e6);
Map<String, ArrayList<String>> multimap = new HashMap<>();
for(Employee emp : liste){
if(!multimap.keySet().contains(emp.getId())){
multimap.put(emp.getId(), new ArrayList<>());
multimap.get(emp.getId()).add(emp.getName());
}
else{
multimap.get(emp.getId()).add(emp.getName());
}
}
for(Entry entry : multimap.entrySet()){
System.out.println(entry.getKey() + "/" + entry.getValue());
}
}
甚至更短,如:
public static void main(String args[]) {
List<Employee> liste = new ArrayList<>();
liste.add(new Employee("CG1","CL1"));
liste.add(new Employee("CG1","CL2"));
liste.add(new Employee("CG1","OTH"));
liste.add(new Employee("TST","AGY"));
liste.add(new Employee("TST","CAG"));
liste.add(new Employee("1.2","EQU"));
Map<String, ArrayList<String>> multimap = new HashMap<>();
for(Employee emp : liste){
if(!multimap.keySet().contains(emp.getId())){
multimap.put(emp.getId(), new ArrayList<>());
multimap.get(emp.getId()).add(emp.getName());
}
else{
multimap.get(emp.getId()).add(emp.getName());
}
}
for(Entry entry : multimap.entrySet()){
System.out.println(entry.getKey() + "/" + entry.getValue());
}
}