2012-10-20 9 views
2

은 키에 의해 우리가 그룹화 할 수있는 방법이 있나요 및 결과는HashMap의 그룹

A = 10 
    B = 8 

어떤 도움이 도움이 될 것입니다 자바

HashMap<String, Integer> map = new HashMap<String, Integer>(); 

    map.put("A", 2); 
    map.put("A", 3); 
    map.put("B", 4); 
    map.put("A", 5); 
    map.put("B", 4);  
에서의 HashMap에

을 값을 추가! !! !!

+6

을 넣어 체크 요소를 수행하는 것이 경우에 존재하는 동안 추가하고 놓습니다. –

+0

대신 출력물에 대해 설명해주십시오. –

+0

예, if 문과'map.containsKey' 메소드를 사용하십시오. 넌 할 수있어. – goat

답변

3

쓰기 유틸리티 메소드

private static class MutableValue { 
    double value; 
    public MutableValue(double value) { 
     this.value = value; 
    } 
    public void add(double value) { 
     this.value += value; 
    } 
} 

MutableValue value = sourceNameMap.get(ticketId); 
if (oldValue == null) { 
    sourceNameMap.put(new MutableValue(entryValue)); 
} else { 
    value.add(entryValue); 
} 
+0

+1 이것이 방법입니다. –

+0

만약 당신이 모든 값에 접근하고 싶다면, 다음에 곱셈을 할 수 있습니다. – Jayy

+0

@KaipaMSarma 그럼 당신의 해결책이 더 좋습니다. 그러나 그것은 OP 질문이 아닙니다. –

2

할 수 있습니다이 방법

HashMap<String, ArrayList<Integer>> 

의 그룹이 A 킵는 ArrayList를

+1

합계를 검색하는 데 O (n) 시간이 걸립니다. –

3

당신은 해시 맵을 사용하지 않아야에 값을 추가 볼 때마다.

map.put("A", 2); 
map.put("A", 3); 

두 번째 put은 첫 번째 put을 덮어 씁니다. 목록을 사용하십시오. 그것을 반복하고 자신을 추가하십시오.

5

이런 식으로 뭔가 작업을해야합니다 :

Map<String, Integer> map = new HashMap<>(); 
......... 
public void putAndIncrement(String key, int value) { 
    Integer prev = map.get(key); 
    Integer newValue = value; 
    if (prev != null) { 
     newValue += prev.intValue(); 
    } 
    map.put(newValue); 
} 
0

참조 대답 Java algorithm to track parts of aggregated values에 :이 수행

public void incrementValue(HashMap<String, Integer> map, String key, int value) { 
    Integer old = map.get(key); 
    if (old == null) { 
     map.put(key, value); 
    } else { 
     map.put(key, value + old); 
    } 
}