计算Hashmap中的项目数

时间:2016-11-18 05:59:13

标签: java arrays

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 个答案:

答案 0 :(得分:2)

您可以使用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'

答案 1 :(得分:0)

您可以在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来避免重复

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:-1)

我没有看到你使用HashMaps。另外,为避免重复,您可以使用Sets。

您可以将值保留在HashMap中,并使用以下内容获取每个值的计数:

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

答案 4 :(得分:-1)

你需要做这样的事情:

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