2016-06-14 4 views
-4

내가 해시 맵에서 containsKey 값을 얻으려면 포함해시 맵은 키 값

HashMap hm = new HashMap(); 
for (Contact ru : registered_users) { 
    hm.put(ru.getPhone(), ru.getId()); 
} 

if(hm.containsKey(c.getPhone())) { 
    registered_phone_contacts.add(new Contact("", c.getName()); 
               ^^ 
    // Here I need to get value. 
} 

내가 어떻게 할 수 있습니까?

+0

값에서 키가 아닌 값을 가져 오게되어 있습니다. 그건 HashMap이 작동하는 방식이 아닙니다. –

+0

예 .. 그 전화기에는 오직 하나의 키만 있습니다. –

+0

유일한 방법은 역방향지도를 유지하는 것입니다 (값에서 키로). 이것은 "양방향 맵"이라고하며 JDK의 표준 데이터 구조는 아닙니다. –

답변

0

당신은 그런 식으로 그것을 얻을 수 있습니다

private String getKey(Integer value){ 
    for(String key : yourHashMap.keySet()){ 
     if(yourHashMap.get(key).equals(value)){ 
      return key; //return the first found 
     } 
    } 
    return null; 
} 

또는 java8에서 스트림 API를

: 그것은 당신의 키에 고유 한 값이있는 경우에만 작동합니다

private Optional<String> getKey(Integer value){ 
    return yourHashMap.entrySet().stream().filter(e -> e.getValue().equals(value)).map(e -> e.getKey()).findFirst(); 
} 

...

업데이트 :

구아바에 BiMap 있음 - 체크 아웃 here

0

여기서는 전화 번호가 고유 한 것으로 간주됩니다. 그렇지 않으면 하나의 ID를 가져 오는 것이 의미가 없습니다. 그렇다면 가장 간단한 해결책은 아마도 reverseMap.put(ru.getPhone(), ru.getId())을 사용하는 역 매핑을 사용하여 다른 해시 맵을 작성하는 것일뿐입니다.

그러면 revserseMap.get(c.getPhone());을 할 수 있습니다.

예를 들어 역방향 맵핑을 사용하면 앞으로 매핑이 필요하지 않으므로 삭제할 수 있습니다. 당신은 containsKey에 추가하여 맵에서 값을 검색 할 수 있습니다 8. ​​

Map<Long, String> hm = new HashMap<>(); 

final Contact c = ...; 
Optional<Long> idOpt = hm.entrieSet().stream() 
    .filter((e) -> e.getValue().equals(c.getPhone()) 
    .map((e2) -> e2.getKey()) 
    .findAny(); 
idOpt.ifPresent(id -> System.out.println(id)); 
long id = idOpt.orElse(-1L); 
0

그냥 자바 :

HashMap hm = new HashMap(); 
for (Contact ru : registered_users) { 
    hm.put(ru.getPhone(), ru.getId()); 
} 

if(hm.containsKey(c.getPhone())) { 
    registered_phone_contacts.add(new Contact(hm.get(c.getPhone()), c.getName()); 
               ^^ 
    // value = hm.get(c.getPhone()) 
} 

또는 먼저 값을 검색하고 변경할 수 있습니다 contains 키 대신 값을 테스트하는 경우 :

<TypeOfId> id = hm.get(c.getPhone()); 
if(id != null) { 
    registered_phone_contacts.add(new Contact(id, c.getName()); 

...           ^^ 
} 

도움이 되었으면 감사합니다.