Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算Hashmap中的项目数_Java_Arrays - Fatal编程技术网

Java 计算Hashmap中的项目数

Java 计算Hashmap中的项目数,java,arrays,Java,Arrays,您可以使用流轻松解决此问题: If i submit General then GeneralAndroid = 2. (it should be calulate with per count per year. so Ouput result is 2). If i submit AdminAndroid then AdminAndroid =2. If i submit AdminIOS then AdminIOS=1. 那就叫它: public long countE

您可以使用
轻松解决此问题:

   If i submit General then GeneralAndroid = 2. (it should be calulate with per count per year. so Ouput result is 2).
   If i submit AdminAndroid then AdminAndroid =2.
   If i submit AdminIOS then AdminIOS=1.
那就叫它:

public long countElements(String needle) {
    return keyList.stream()
         .filter(s -> s.contains(needle))
         .distinct() //use if you want to have distinct results, e.g. AdminAndroid=2
         .count();
}

我看不到你在使用HashMaps。此外,为了避免重复,可以使用集合

您可以将这些值保存在HashMap中,并使用以下方法获取每个值的计数:

System.out.println(countElements("AdminAndroid")); //prints '2'
int count=Collections.frequency(新的ArrayList(hashmapObject.values()),“2015GeneralAndroid”);

您可以在Java8中按如下方式执行

int count = Collections.frequency(new ArrayList<String>(hashmapObject.values()), "2015GeneralAndroid");
Set keySet=new HashSet();
密钥集添加(“2015GeneralAndroid”);
密钥集添加(“2016GeneralAndroid”);
密钥集添加(“2015AdminAndroid”);
密钥集添加(“2015AdminAndroid”);
密钥集添加(“2016AdminAndroid”);
密钥集添加(“2016AdminIOS”);
字符串输入=“GeneralAndroid”;
长计数=keySet.stream().filter(e->e.contains(input)).count();

请注意,我使用了一个
集合
来避免重复

这个答案有点推测性,但是假设您的每个字符串前面都有四位数的年份,并且重复意味着字符串的剩余部分(减去年份)与另一个字符串匹配,那么您可以尝试以下逻辑:

首先将所有内容添加到集合:

        Set<String> keySet = new HashSet<>();

        keySet.add("2015GeneralAndroid");
        keySet.add("2016GeneralAndroid");
        keySet.add("2015AdminAndroid");
        keySet.add("2015AdminAndroid");
        keySet.add("2016AdminAndroid");
        keySet.add("2016AdminIOS");

        String input = "GeneralAndroid";

        Long count = keySet.stream().filter(e -> e.contains(input)).count();
Set Set=newhashset();
集合。添加(“2015GeneralAndroid”);
集合。添加(“2016GeneralAndroid”);
集合。添加(“2015AdminAndroid”);
集合。添加(“2015AdminAndroid”);
集合。添加(“2016AdminAndroid”);
集合。添加(“2016AdminIOS”);
然后创建一张地图来实际计算事物:

Set<String> set = new HashSet<>();
set.add("2015GeneralAndroid");
set.add("2016GeneralAndroid");
set.add("2015AdminAndroid");
set.add("2015AdminAndroid");
set.add("2016AdminAndroid");
set.add("2016AdminIOS");
Map Map=newhashmap();
for(字符串str:set){
字符串键=str.substring(4);
整数cnt=map.get(键);
int val=(cnt==null)?1:cnt.intValue()+1;
地图放置(键,val)
}
最后在地图上迭代以获得结果:

Map<String, Integer> map = new HashMap<>();
for (String str : set) {
    String key = str.substring(4);
    Integer cnt = map.get(key);
    int val = (cnt == null) ? 1 : cnt.intValue()+1;
    map.put(key, val)
}
for(Map.Entry:Map.entrySet()){
System.out.println(entry.getKey()+“/”+entry.getValue());
}

您需要执行以下操作:

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "/" + entry.getValue());
}
HashMap hMap=newlinkedhashmap();
int hashSize;
/* 
一些操作
*/
hashSize=hMap.size();//这将给出HashMap中的项目总数

“我使用了Hashmap”不,你没有。您使用了
ArrayList
我使用Hashmap来避免重复。。。事实上,如果你想过滤掉重复的数据,你应该使用一个集合。所以总是忽略前四位数字的年份,但保留字符串的剩余部分的规则也是这样吗?真的@TimBiegeleisen或您必须在添加时迭代并检查.contains方法,然后如果不存在,则添加,否则不添加。@TimBiegeleisen除了double
“2015AdminAndroid”
只计算一次,显然。但是
AdminAndroid
打印
3
,OP想要
2
。这将使用
#distinct
调用键列表是arrayList。所以我并没有得到那个样的流。你们可以做到,但你们不应该使用一个原始类型的列表<代码>列表键列表=新建ArrayList()会更合适。如果有3号丙酰胺。但在数据发布之前,2015年有2个值,2016年有1个值。如果2015年也有两个值。我需要2015年作为一个数字,2016年作为另一个数字。总共只有2个AdminAndroid,但查找
AdminAndroid
会找到
3
,OP想要
2
@android,因为这肯定不会找到
AdminAndroid
的3个。这是第一次筛选集合的目的。“请取消你的否决票。@Andreas,但清楚剧组在做什么吗?”?有两层副本,首先是原始副本条目(前一年),然后是删除后出现的副本。我仍在考虑“如果我提交
General
then
GeneralAndroid=2
”,这与使用Set/Map的任何实现是如何配合的。@Andreas LOL当然让我继续,并在我的代码中添加一些全文搜索功能:-)
for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "/" + entry.getValue());
}
HashMap<String, ArrayList<Item>> hMap = new LinkedHashMap<String, ArrayList<Item>>();
 int hashSize;
  /* 
      Some Operations
  */
 hashSize = hMap.size(); // This will give the total no. of items in HashMap