有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java统计Hashmap中的项目数

List<String> keyList = new ArrayList<String>();
keyList.add("2015GeneralAndroid");
keyList.add("2016GeneralAndroid");
keyList.add("2015AdminAndroid");
keyList.add("2015AdminAndroid");
keyList.add("2016AdminAndroid");
keyList.add("2016AdminIOS"};
  1. 我使用Hashmap来避免重复
  2. 但我需要将2015GeneralAndroid输出为“1”,将2016GeneralAndroid输出为“1”。总数是2
  3. 当我将参数作为GeneralAndroid传递时,这些输出必须返回,然后输出应该是2

    我需要这个输出:

       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.
    

共 (5) 个答案

  1. # 1 楼答案

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

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

    Set<String> set = new HashSet<>();
    set.add("2015GeneralAndroid");
    set.add("2016GeneralAndroid");
    set.add("2015AdminAndroid");
    set.add("2015AdminAndroid");
    set.add("2016AdminAndroid");
    set.add("2016AdminIOS");
    

    然后创建一张地图来实际计算:

    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<String, String> entry : map.entrySet()) {
        System.out.println(entry.getKey() + "/" + entry.getValue());
    }
    
  2. # 2 楼答案

    我没看到你在使用哈希映射。此外,为了避免重复,可以使用集合

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

    int count = Collections.frequency(new ArrayList<String>(hashmapObject.values()), "2015GeneralAndroid");
    
  3. # 3 楼答案

    你需要这样做:

    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
    
  4. # 4 楼答案

    在Java8中,您可以按如下方式进行操作

            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来避免重复

  5. # 5 楼答案

    您可以使用Stream轻松解决这个问题:

    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();
    }
    

    那就叫它:

    System.out.println(countElements("AdminAndroid")); //prints '2'