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
thenGeneralAndroid=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