用于计算与java中的散列映射中的每个值相对应的条目数的逻辑

时间:2016-09-22 05:09:25

标签: java count hashmap

目前,我已在值字段中对Hashmap进行了排序。 我需要计算与hashmap中每个值关联的条目数。

最初我想过迭代排序的hashmap并计算条目数,直到值没有改变。为了获得下一个值,我需要进入下一个条目,但是在一个循环迭代结束之前没有办法做到这一点。 但我只是迷失在逻辑中而无法继续。 :(

我尝试了另一种在stream()中使用过滤器的逻辑。 将过滤器应用于1到50的值,然后计算满足谓词的条目。

for(int i = 1; i < COUNT; i++){
            int count = (int) single_count.entrySet().stream().filter(v -> v.getValue() == 1).count(); //collect(Collectors.toList());
            unigram_Nc.put(i, count);
        }

在这种情况下,我知道hashmap中的值。但我想知道通用解决方案,它返回与每个值对应的hashmap中的条目数。 有没有其他方法可以计算具有特定值的条目数而不知道之前的值?

3 个答案:

答案 0 :(得分:2)

使用java 8 stream api可以更轻松地完成这项工作。

为此,您应该从地图中获取值:if (file_exists($target_file)) { $_FILES['file']['name']=rand(1,100000).$_FILES['file']['name']; $uploadOk = 0; }

使用if (file_exists($target_file)) { $_FILES['fileToUpload']['tmp_name']=rand(1,100000).$_FILES['fileToUpload']['tmp_name']; $uploadOk = 0; },您可以获得此集合的流。

然后您可以将map.values()方法与.stream()收集器一起使用。

最后看起来像这样:

collect

答案 1 :(得分:0)

对于较旧的JDK,您可以这样计算:

Create a class and override its equals() and hashcode() method. Create a field of your preferred type say A and add another int type field to count.
1) Your hashcode() method should return the hash value of your field A.
2) In your equals() method, increase the value of count by 1 and set the count as value

Now create 2 hashmaps, first will have your initial map's value as keys. The second one will have the result of all the counts of values.

请参阅以下代码段:

class A
{
   Integer count = 1;
   String name;

   @override
   public int hashcode()
   {
      return name.hash();
   }

   @override
   public boolean equals(Object obj)
   {
      obj.count++;   
      secondmap.put(obj.name, obj.count);         

      return true;
   }

}

Now in your main class:

static firstmap = new ConcurrentMap<A, Integer>();

static secondmap = new ConcurrentMap<String, Integer>();

iterate over yourmap
{
   put the value in firstmap as firstmap.put(yourmap value, 0);
}

在迭代结束时,您将获得secondmap中所有值的计数。 注意:如果您的初始地图具有不同的签名,那么您可以通过A的构造函数显式设置String name的值。

这只是一个例子,根据您的解决方案,实际实现可能略有不同,但您可以参考此逻辑。同时在创建初始地图时,您可以实现此目的。这样可以省去再次迭代的麻烦。

答案 2 :(得分:0)

尝试这个简单的逻辑

insertskateboard.php