我有一个
Iterator<Text> values
其中每个文本都包含句点/类型对。
看起来像这样
早上短信有没有办法计算一对没有很多if else块出现的次数?
结果应该是
3点钟上午短信 2早上的声音答案 0 :(得分:2)
使用Streams.collect:
List<String> values = new ArrayList<>();
values.add("morning");
values.add("evening");
values.add("morning");
// Function.identity() means p->p, since example collection is very simple
// If your objects are more than strings, you'll need to map them: p -> p.getName(), for example
Map<String, Long> collect =
values.stream().collect(groupingBy(Function.identity(), counting()));
System.out.println(collect);
答案 1 :(得分:1)
你可以这样做
HashMap<String, Integer> maps = new HashMap<>();
while(itr.hasNext()) {
Object element = itr.next();
Integer i = maps.get(element.toString());
if(i == null) {
maps.put(element.toString(), 1);
}
else {
maps.put(element.toString(), ++i);
}
}
//See result
for(Entry<String, Integer> e : maps.entrySet()) {
System.out.println(e.toString());
}
答案 2 :(得分:1)
首先使用HashMap<Text,Integer>
来跟踪Text
为key
且Integer
为value
的每个不同时段/类型对频率。
HashMap<Text,Integer> m = new HashMap<Text,Integer>();
//Populate the HashMap
while(values.hasNext())
{
Text element = values.next();
if(m.get(element) == null)
{
m.put(element , 1);
}
else m.put(element , m.get(element) + 1);
}
//Display the frequencies
for (Map.Entry<Text, Integer> entry : m.entrySet())
{
System.out.println(entry.getValue() + "/" + entry.getKey().period );
}
我假设Text
是包含名为period
的公共字段的类,其中包含morning sms
答案 3 :(得分:0)
尝试此方法,例如
public static int countStringOccurrences(String text, String pattern) {
int count = 0;
int i = 0;
// Keep calling indexOf for the pattern.
while ((i = text.indexOf(pattern, i)) != -1) {
// Advance starting index.
i += pattern.length();
// Increment count.
count++;
}
return count;
}
阅读: