2013-06-30 3 views
-1

나는 내가이 사람과 주소 객체를 얻고있는 목록이목록 <HashMap <Obj1, Obj2>>을 List <HashMap <Ob1, List <Obj2> >>으로 효율적으로 병합 하시겠습니까?

List<HashMap<Person, Address>> 

으로 데이터 구조를 가지고있다. 나는 주어진 목록 반복 마쳤하고 후에, 나는이 작업을 수행하려면 어떤 효율적인 방법이 있나요

List<HashMap<Person, List<Address>>> 

List<HashMap<Person1, Address1>> 
List<HashMap<Person1, Address2>> 
List<HashMap<Person2, Address3>> 

으로 뭔가를 각 사람의 주소를 병합하고 얻을 필요가 -있을 수 있습니다 다른 접근법을 가지고 있습니까? 또는 목록 반복은 옵션 일뿐입니다. 목록에 많은 양의 데이터가 포함되어 있다면이를 치료하는 가장 좋은 방법은 무엇일까요?

+0

플래그와 모두를 설정하는 반복 사항입니다. 그러나 그것은 도움이되지 않습니다. 나는 그것만이 문제를 복잡하게 만든다고 생각한다. –

+2

가장 확실한 방법으로하십시오. 특정 문제가 발생하면 다른 질문을하십시오. –

+1

List Over Map을 사용하면 어떤 이점이 있습니까? 왜 그렇게해야합니까? – Masudul

답변

1

당신은 목록에 Person에서 하나의 맵에 맵의 목록을 변환 할 수 있습니다 (설정을 사람과 주소를 보유 할 수

List<HashMap<Person, Address>> list = ... 
    HashMultimap<Person, Address> mm = HashMultimap.create(); 
    for (HashMap<Person, Address> m : list) { 
     for(Entry<Person, Address> e : m.entrySet()) { 
      mm.put(e.getKey(), e.getValue()); 
     } 
    } 

주 구글 컬렉션 Multimap과를 사용할 수 있습니다 ?) 주소는 다음과 같습니다.

Map<Person, List<Address>> restructure(List<Map<Person, Address>> data) { 
    Map<Person, List<Address>> result = new HashMap<>(); 
    for (Map<Person, Address> map : data) { 
     for (Map.Entry<Person, Address> entry : map.entrySet()) { 
      List<Address> addresses = result.get(entry.getKey()); 
      if (addresses == null) { 
       addresses = new LinkedList<>(); // or ArrayList, or ... 
       result.put(p, addresses); 
      } 
      addresses.add(entry.getValue()); 
     } 
    } 
    return result; 
} 
2

당신이 목록없이

+0

'HashMultimap'은 중복 된 키 - 값 쌍을 가지고 있지 않습니다 - Map >과 더 유사합니다. –

+0

또한 Spring에는'Map >'을 확장하는 ['LinkedMultiValueMap'] (http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework/util/LinkedMultiValueMap.html)이 있습니다. –

관련 문제