2016-11-13 2 views
1

У меня возникли трудности с сравнением строки (str) с ключами в hashmap. Как вы можете видеть из приведенного ниже кода, у меня есть несколько ключей. Я сравниваю str с ключами, но я не мог получить значения для этого конкретного ключа. Обратите внимание, что карта содержит coin.Как сравнить строку с ключами в хэш-карте

это работает только тогда, когда я непосредственно ввести строку, напримерentry.getKey().getKeyOne().toString().contains("coin")

String str = "coin"; 
for(Map.Entry<Pair, String> entry : map.entrySet()) { 
    if(entry.getKey().getKeyOne().toString().contains(str)|| 
     entry.getKey().getKeyTwo().toString().contains(str)) { 
      entry.getValue(); 
    } 
} 

public class Pair { 
    private String keyOne; 
    private String keyTwo; 

    Pair(String one,String two) { 
     this.keyOne=one; 
     this.keyTwo=two; 
    } 

    public String getKeyOne() { 
     return keyOne; 
    } 

    public String getKeyTwo() { 
     return keyTwo; 
    } 
} 
+2

Что такое «пара»? – Andrew

+0

попробуйте это в android, но http://stackoverflow.com/questions/40062224/how-to-get-the-distinct-element-from-mediastore-by-java –

+1

Можете ли вы опубликовать реализацию toString для KeyOne и KeyTwo если это ваш собственный класс. Если нет, добавьте код для пары, как было сказано ранее Эндрю. – jay

ответ

1

Совет: Как долго вы используете свой собственный класс Pair в Map вам сусло переопределение equals() и должны переназначения hashCode() ,

Вы, например, используете строковый литерал, потому что «монета» находится в string pool и все ссылки на одну и ту же строку.

Запускается здесь:

public class Pair { 

    private String keyOne; 
    private String keyTwo; 

    Pair(String one, String two) { 
     this.keyOne = one; 
     this.keyTwo = two; 

    } 

    public String getKeyOne() { 
     return keyOne; 
    } 

    public String getKeyTwo() { 
     return keyTwo; 

    } 

    public static void main(String[] args) { 
     Map<Pair, String> map = new HashMap(); 
     map.put(new Pair("coin", "5"), "U"); 
     map.put(new Pair("bill", "100"), "H"); 
     map.put(new Pair("10", "5coin"), "T"); 

     String str = new String("coin"); 
     for (Map.Entry<Pair, String> entry : map.entrySet()) { 
      if (entry.getKey().getKeyOne().toString().contains(str) 
        || entry.getKey().getKeyTwo().toString().contains(str)) { 
       System.err.println(entry.getValue()); 
      } 
     } 
    } 
} 
+0

Можете ли вы привести мне пример, пожалуйста? – elyon

+0

спасибо PeterMmm. это решение проблемы – elyon

0

Вот простой пример кода для вас Если вы хотите за один Hashmap только

public void findInkeys(String findkey){ 
    HashMap<String, Object> map=new HashMap<>(); 

    //Place your content of MAp Here 
    //Start 

    //end 
    //or you can place your content anywhere else but make sure is is initialized before this 


    Set<String> keys=map.keySet(); 
    boolean isInKeys=false; 
    for (String k : keys) 
    { 
     if(k.equals(findkey)) 
     { 
      isInKeys=true; 
     } 
    } 
    System.out.println(isInKeys); 
} 

, если вы хотите его для любого hashmap

public void findInkeys(HashMap<String,Object> map,String findkey){ 

    Set<String> keys=map.keySet(); 
    boolean isInKeys=false; 
    for (String k : keys) 
    { 
     if(k.equals(findkey)) 
     { 
      isInKeys=true; 
     } 
    } 
    System.out.println(isInKeys); 
} 

если у вас есть несколько ключей для сравнения, то g o с кодом ниже

public void findInkeys(HashMap<String, String> map,ArrayList<String> keyList){ 
    Set<String> keys=map.keySet(); 
    boolean isInKeys=false; 
    for (String k : keys) 
    { 
     if(keyList.contains(k)) 
     { 
      isInKeys=true; 
     } 
    } 
    System.out.println(isInKeys); 
} 
Смежные вопросы