2016-08-11 2 views
-1

다음 개체가 ArrayList에 있고이 개체의 값은 처음에 숫자로 표시되어 있습니다 (Id).목록에있는 값을 기반으로 n 개의 목록을지도에 병합

enter image description here

난 그 키 값 ID와 객체 여야 객체 ID와 있어야 할 Map 오브젝트를 생성 할 필요가있다. 하루가 끝날 무렵, 나는 그런 식으로지도를 만들고 싶습니다.

enter image description here

는 이미 루프와 if 문을 많이 두 가지로이 문제를 해결했지만 그것은 나에게 매우 추한 것 같다.

더 깨끗한 해결책은 인정 될 것입니다. 편집 질문 편집에 맞게

+1

나는 첫 번째 그림을 얻지 못합니다. 어떤 종류의 목록입니까? ** 첫 번째 ** 요소가 ID 인 목록을 가질 수 없습니다. 다른 요소는 다른 것입니다. 그런 다음지도에는 키당 하나의 값이 있습니다. 그래서, 정말로 여러개의 엔트리를 원한다면'Map >'이 필요합니다. – GhostCat

+0

@GhostCat 이것은 삽화 일뿐입니다. 이것은 매우 일반적인 목록이며 목록에있는 객체의 값은 ID로 표시됩니다. 우리는 이것이 목록에있는 객체의 값에 불과하다고 말합니다. –

+1

일부 코드를 보여주고 특정 문제를 제기해야합니다. 이것은 코드 작성 서비스가 아닙니다. – marstran

답변

3
Map<Integer, List<Foo>> result = list.stream().collect(Collectors.groupingBy(Foo::getId)); 
0

는,이만큼 간단하다 :

ArrayList<Element> list = ...; 
HashMap<Integer, List<Element>> map = new HashMap<Integer, List<Element>>(); 

for(Element e : list) { 
    ArrayList<Element> auxList; 
    if(map.contains(e.getId()) { 
     auxList = map.get(e.getId()); 
    } else { 
     auxList = new ArrayList<Element>(); 
     map.put(e.getId(), auxList); 
    } 
    auxList.add(e); 
} 

그냥 시작 목록을 반복하고지도에 요소를 추가 할 수 있습니다. 지도에 이미 ID가 포함되어 있으면 목록에 추가하십시오. 그렇지 않은 경우 새 목록을 만드십시오.

+0

나는 내 질문을 편집했다. 나는 그것이 지금 더 분명하다고 생각한다. –

+0

@AdInfinitum 결과적으로 대답을 편집했습니다. 희망이 도움이됩니다. –

관련 문제