我有一个问题,我有一些数据,并有一个类属性(将有类,两个,三种类型,所以它没有定义), ,我想统计班级频率。所以如果我发现新类型的类,我需要将它保存在字典中,但如果我发现已经在字典中的类,我应该增加计数。 那么如何使用java处理它?使用字典计算数据的频率
这里是
data 1 class X
data 2 class Y
data 3 class X
所以字典应该保存类X是2,和Y类为1 但类类别的数量的频率不限定它可以是X或X的例子,Y或X,Y,Z
我有一个问题,我有一些数据,并有一个类属性(将有类,两个,三种类型,所以它没有定义), ,我想统计班级频率。所以如果我发现新类型的类,我需要将它保存在字典中,但如果我发现已经在字典中的类,我应该增加计数。 那么如何使用java处理它?使用字典计算数据的频率
这里是
data 1 class X
data 2 class Y
data 3 class X
所以字典应该保存类X是2,和Y类为1 但类类别的数量的频率不限定它可以是X或X的例子,Y或X,Y,Z
可以使用HashMap
存储时间的数,你发现每一个类:
final String data = "data 1 class X\ndata 2 class Y\ndata 3 class X";
final Scanner sc = new Scanner(data);
final HashMap<String, Integer> classes = new HashMap<String, Integer>();
while (sc.hasNextLine()) {
final String line = sc.nextLine();
final String clazz = line.substring(line.indexOf("class")+6);
if (!classes.containsKey(clazz))
classes.put(clazz, 0);
classes.put(clazz, classes.get(clazz)+1);
}
for (Entry<String, Integer> entry : classes.entrySet())
System.out.println("Class "+entry.getKey()+" found "+entry.getValue()+" time(s).");
输出:
Class Y found 1 time(s).
Class X found 2 time(s).
看起来像你正在分类的东西。这里是一个版本(类似弗洛朗培尔的,而是一个完整的工作示例,只需要提供你的文件名):
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
public class Classify {
public static void main(String[] args) throws Exception{
BufferedReader reader=new BufferedReader(new FileReader("YOUR_FILENAME"));
String line;
Map<String,AtomicInteger> classByCount=new HashMap<>();
while ((line = reader.readLine()) != null) {
final String[] lineArray = line.split("\\s");
String clazz=lineArray[lineArray.length-1];
AtomicInteger count=classByCount.get(clazz);
if(count==null)classByCount.put(clazz,(count=new AtomicInteger(0)));
count.incrementAndGet();
}
for(Map.Entry<String,AtomicInteger> entry:classByCount.entrySet())
System.out.printf("class '%s':%d\n",entry.getKey(),entry.getValue().get());
}
}
您的问题,真不明白,你有一些代码来告诉我们?一些示例数据? –
听起来像整数散列图 –