2014-04-21 2 views
-1

중첩 된 맵을 사용하여 값을 저장했습니다. 특정 형식으로 인쇄해야합니다.중첩 된 맵의 내용을 특정 형식으로 표시

입력 데이터 :

University  Department DeptHead 
A    X    Tim 
B    X    Jim 
C    X    John 
A    Y    Alex 
C    Z    Peter 
D    Z    Dan 
B    Z    Ashley 
B    Y    Peter 
D    Y    Maria 

번호 :

import java.io.OutputStream; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 

public class testNested { 

public static void printMap(Map<String, String> map,Object key) 
{ 
    Iterator it = map.entrySet().iterator(); 

    // System.out.print(key.toString()); 

    while(it.hasNext()) 
    { 
     Map.Entry pairs = (Map.Entry)it.next(); 
     System.out.print(key.toString() + " "+ pairs.getKey() + " " +   pairs.getValue()); 
    } 
    System.out.println(); 
} 

public static void main(String arg[]) 
{ 
    Map<String,Map<String,String>> map= new HashMap<String,Map<String, String>>(); 
    Map<String,String>A=new HashMap<String, String>(); 
    Map<String,String>B=new HashMap<String, String>(); 
    Map<String,String>C=new HashMap<String, String>(); 
    Map<String,String>D=new HashMap<String, String>(); 
    A.put("X", "Tim"); 
    A.put("Y", "Alex"); 
    B.put("X", "Jim"); 
    B.put("Z", "Ashley"); 
    B.put("Y", "Peter"); 
    C.put("X", "John"); 
    C.put("Z", "Peter"); 
    D.put("Y", "Maria"); 
    D.put("Z", "Dan"); 
    map.put("A",A); 
    map.put("B", B); 
    map.put("C", C); 
    map.put("D", D); 

    Iterator it = map.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry pairs = (Map.Entry)it.next(); 
     //System.out.println(pairs.getKey()); 
     printMap((Map<String, String>)pairs.getValue(),pairs.getKey()); 
    } 
} 
} 

출력 : I 포맷 아래 (예상 출력)의 출력을 표시해야

D Y Maria Z Dan 
A Y Alex X Tim 
B Y Peter X Jim Z Ashley 
C X John Z Peter 

:

University  X  Y   Z  
A    Tim Alex  - 
B    Jim Peter Ashley 
C    John -   Peter 
D    -  Maria  Dan 

HashMap을 사용하여 이것을 수행하는 가장 좋은 방법은 무엇입니까?

HashMap 없이는이 문제에 대한 최선의 방법은 무엇입니까?

답변

1

해시 맵은 항상 임의의 순서로 인쇄됩니다. 일종의 주문 형식을 유지해야하는 경우지도 목록을 제안하거나 추상화 래더 위로 한 걸음 더 올려 놓으면지도 컬렉션을 만들 수 있습니다. 이는 데이터로 무엇을해야하는지에 달려 있습니다. 분산 설정에서는 일반적으로이 유형의 데이터 수집에 HashMap 만 있으면 충분하며 데이터베이스는 HashMap 자체가 아니라 정렬을 수행합니다. 당신이 당신의지도를 확인하고 필요한 순서대로리스트에 추가

private Collection<Map<String, String>> people = 
          new ArrayList<Map<String, String>>(); 

이 방법 :
는 여기에 내가 말하고 무엇을 빠른 스케치입니다.
당신은 너무 같은 생성자를 통해 주위를 통과하고 당신이 할 필요가 무엇이든 할 수있는 제안 그것을 수집을 할 경우 : 질문이 편집 된 후

private Set<Map<String, String>> peopleNoDuplicates = 
          new TreeSet<Map<String, String>>(people); 

추가 : 내가 아니다 시간 가용성으로 인해 모든 것을 단계적으로 보여줄 수 있습니다. 죄송합니다. 문제가 계속되면 다시 방문하여 수정 해 드리겠습니다.

문제 도메인에 실제로 제대로 수행 할 수있는 개체가 충분하지 않습니다. "Person"이라는 객체가 있어야하고 "University"객체와 "University"내부 필드 인 Department 객체가 있어야합니다. 그러면 객체를 사용하여 서로 정보를 전달할 수 있습니다. 그렇지 않으면 누락 된 것입니다 모든 위대한 것들에 OOP가 할 수있는

public class Person{ 
    private String name; 
    private int id; 
    private static instanceCounter = 1000; 
//always use the constructor to make sure you get mandatory values in your objects 
public Person(String name){ 
    setName(name); 
    this.id = instanceCounter++; 

public final void setName(String name)throws IllegalArg....{ 
    if(name == null || name.isEmpty()){ 
     throw new IllegalArg..Ex...("Sorry name is not valid"); 
    } 
    this.name = name; 
} 

public String getName..... 

을 그럼 당신은

public class University{ 
    // in here you can have a some sort of collection or map of dept heads and match them up with a collection of people. ASgain a Map is the fastest way to do this, but this is where you have to put some thought into the problem and think about what is really the best way to do this. 

당신은 형식 개체를 사용하여 테스트 파일로 넣어 시도 할 수있는 대학을 필요로 ... 나도 몰라, 그것은.; 당신의 전화가 있지만, 많은 생각과 시행 착오가 필요합니다. 다른 용지 걸림이 생길 경우 다시 전화하십시오.

+0

지도 컬렉션은 무작위 순서 형식을 해결하는 데 도움이 될 것입니다. 그러나 각각의 대학 (A, B, C, D)에 대해 deptHead를 -ve Y 축과 코스 (X, Y, Z)를 X 축을 따라 이동시킵니다. 위에서 설명한대로 데이터를 표시하는 방법을 알려주십시오. –

+0

컬렉션은 매우 추상적 인 용어이며 많은 것들이 될 수 있습니다.필자는 Java Collections API를 사용하여 여러 가지 방법을 사용하여 List 및 ArrayList에 초점을 맞추는 것이 도움이 될 것이라고 생각합니다. 나머지는 형식화 된 것처럼 보입니다. 나는 정말로 데이터와 포맷을 분리하려고 노력할 것입니다. 이러한 측면을 처리 할 수있는 더 많은 객체를 도입하여이를 수행 할 수 있습니다. 행운을 빕니다 – nckbrz

관련 문제