2016-08-26 22 views
-1

我需要與具有相同引用一個對象相同的參考列表的組對象,其stud_locatio字段包含上述項目中的所有字段的串聯。組對象

public class Grouping { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

    List<Entreprise> entlist = new ArrayList<Entreprise>(); 
    entlist.add(new Entreprise("11111", "logi", "New York")); 
    entlist.add(new Entreprise("11111", "logi", "California")); 
    entlist.add(new Entreprise("22222", "rafa", "Los Angeles")); 
    entlist.add(new Entreprise("22222", "rafa", "New York")); 
    entlist.add(new Entreprise("33333", "GR SARL", "LONDON")); 
    entlist.add(new Entreprise("33333", "GR SARL", "LONDON")); 
    entlist.add(new Entreprise("33333", "GR SARL", "italie")); 
    entlist.add(new Entreprise("33333", "GR SARL", "Paris")); 

    /* Output should be Like below 
     1111 : logi : logi - New York 
     22222 : rafa : Los Angeles - California 
     33333 : GR SARL : LONDON - italie - paris */ 
} 

class Entreprise { 

    String reference; 
    String stud_name; 
    String stud_location; 

    ENTREPRISE(String sid, String sname, String slocation) { 
     this.ref = sid; 
     this.stud_name = sname; 
     this.stud_location = slocation; 
    } 
} 
+2

聽起來像一個家庭作業。如果你提到這將是更好的,你已經嘗試過什麼到目前爲止做的,你得到了什麼問題/錯誤 – FearlessHyena

+2

...,可能最好也引用賦值,因爲你可能會改寫,它的意思是別的東西.. – user1803551

+0

對於第一行,你的意思是'1111:logi:紐約 - 加利福尼亞'?還有,如果給定的'sid'有多個'sname'? – shmosel

回答

0

辦法做你想要的是像這樣

// Grouping 
    Map<String, Set<String>> group = new HashMap<String, Set<String>>(); 

    for (Enterprise enterp : entlist) { 

     String key = enterp.getReference().concat(":").concat(enterp.getStud_name()); 
     String value = enterp.getStud_location(); 

     if (group.containsKey(key)) { 
      group.get(key).add(value); 
     } 
     else { 
      Set<String> stud = new HashSet<String>(); 
      stud.add(value); 
      group.put(key, stud); 
     } 
    } 

    // Printing 
    for (String id : group.keySet()) { 

     String locations = ""; 
     for (String stud : group.get(id)) { 
      locations = locations.concat("-").concat(stud); 
     } 
     locations = locations.replaceFirst("^\\-", ""); 

     System.out.println(id + ":" + locations); 
    } 

輸出是

22222:rafa:New York-Los Angeles 
33333:GR SARL:Paris-italie-LONDON 
11111:logi:California-New York