Scala HashMap containsValue方法

时间:2014-07-18 12:19:23

标签: java scala collections hashmap

我试图将我用Java编写的算法转换为Scala,但我遇到了Java中存在的containsValue()方法的问题。我想做if (hashMap.containsValue(value))之类的事情,但是我查看了scala文档并且只找到了一个contains(key)方法。 如何在Scala中实现或使用hashmap.containsValue(value)我还是Scala的新手,但这是我目前在Scala中所拥有的内容:

def retString(s: String)
{
  val map = new mutable.HashMap[Int, Char]
  for (c <- s.toCharArray)
  {
      //if(!map.containsValue(c)) goes here
  }

}

` 我尝试转换的完整算法是我用Java编写的removeDuplicates:

public static String removeDuplicates(char[] s)
{

    HashMap<Integer, Character> hashMap = new HashMap<Integer, Character>();
    int current = 0;
    int last = 0;
    for(; current < s.length; current++)
    {
         if (!(hashMap.containsValue(s[current])))
         {
              s[last++] = s[current];
              hashMap.put(current, s[current]);

         }
    }
    s[last] = '\0';
    //iterate over the keys and find the values
    String result = "";
    for (Integer key: hashMap.keySet()) {
        result += hashMap.get(key);
    }
    return result;

}

4 个答案:

答案 0 :(得分:5)

您可以使用exists

map.values.exists(_ == c)

答案 1 :(得分:1)

要知道包含此值的hashmap,您可以使用

hashMap.exists(_._2 == c)

你想要这样的东西 java to scala;)

def removeDuplicates(s: Array[Char]): String = {
    val hashMap = new scala.collection.mutable.HashMap[Integer, Character]()
    var c = 0
    var last = 0
    while (c< s.length) {
      if (!(hashMap.exists(_._2 == c))){
        last+=1
        s(last) = s(c)
        hashMap.put(c, s(c))
      }
      c += 1
    }
    s(last) = '\0'
    var result = ""
    for (key <- hashMap.keySet) {
      result += hashMap.get(key)
    }
    result
  }

答案 2 :(得分:0)

containsValue永远不会是一个有效的操作,因为它不能使用HashMap中的任何特殊魔法。

因此,您可以自己迭代值集合并获得完全相同的性能。

即。在Java中:

for (Ob ob: map.values()) {
    if (search.equals(ob))
       return search;
}

或者只是:

map.values().contains(search);

答案 3 :(得分:0)

您可能很高兴知道Scala集合包含distinct方法:

> List(1,1,1,2,3,3,2,1).distinct
> List(1,2,3)

实施distinctBy时有一个Stack Overflow discussion,这看起来有点用。