2016-12-13 3 views
-3
 **My current code: 

** Мне нужно отформатировать его, так как повторный идентификатор должен быть ключом на карте, а значения должны быть в arraylist. ** он должен работать как раз идентификатор изменения он должен поместить ключ и arraylis на карте, и он должен начать ключ и ArrayList, инициализировать ArrayList и продолжить выполнение петлиКак упорядочить эти значения в карте коллекции Java

 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

Почему это сделать просто, когда вы можете усложнить ситуацию?

Прежде всего, избавитесь от всех ненужных массивов и арраистов. Вся необходимая информация уже включена в список ваших сотрудников, называемых liste. Второй момент: печатать некоторые детали сейчас, а затем может быть полезно, но не печатайте все и вся. Вместо этого вы можете отлаживать свой код. Отладка дает вам очень подробный обзор выполнения.

Ваш код может выглядеть примерно так:

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()); 
     } 
    } 
+0

это может быть реализован с помощью массива как массив [I] [J] и O/P будет такой же, как CG1/[CL1, CL2, OTH] ТСТ/[AGY, CAG] 1.2/[EQU] */ –

+0

Неясно, где и почему вы хотите использовать 2-мерный массив, но в основном вы можете заменить массивList массивом и наоборот – Eritrean

+0

Здесь CG1, TST и 1.2 имеют другую группу и CL1, CL2 , OTH, AGY, CAG и EQU относятся к другой группе, и обе эти группы связаны друг с другом. для пары «государство-государство». Но я должен реализовать его с массивом либо с двумя отдельными массивами, либо с одним массивом. –

Смежные вопросы