我有这样的代码,截至目前有hashmap
employee
类型为<String,Integer>
,其中 String包含部门的名称in which an employee works and
整数包含该员工的年龄。 I want to divide the employees age into different age categories(like 0-20,20-40 and so on) for each department
。我现在的代码是这样的:
public void Employeeage()
{
categoryModel = new CartesianChartModel();
QueryBean obj = new QueryBean();
Map<String, Integer> employee = obj.getEmployeeAge();
System.out.println("After accessing QueryBean");
// 7 groups for age categories
ArrayList<Integer> grp1 = new ArrayList<Integer>();
ArrayList<Integer> grp2 = new ArrayList<Integer>();
ArrayList<Integer> grp3 = new ArrayList<Integer>();
ArrayList<Integer> grp4 = new ArrayList<Integer>();
ArrayList<Integer> grp5 = new ArrayList<Integer>();
ArrayList<Integer> grp6 = new ArrayList<Integer>();
ArrayList<Integer> grp7 = new ArrayList<Integer>();
// for each department s, I want to divide employees into different age catgorie
for(String s: employee.keySet())
{
for(Integer i : employee.get(s)) // Error thrown here that cannot iterate over here
{
System.out.println("Employee age is :"+ i);
if(i.intValue() > 0 && i.intValue() <= 20 )
{
grp1.add(i);
}
else if(i.intValue() > 20 && i.intValue() <= 40 )
{
grp2.add(i);
}
else if(i.intValue() > 40 && i.intValue() <= 50 )
{
grp3.add(i);
}
else if(i.intValue() > 50 && i.intValue() <= 60 )
{
grp4.add(i);
}
else if(i.intValue() > 60 && i.intValue() <= 70 )
{
grp5.add(i);
}
else if(i.intValue() > 70 && i.intValue() <= 80 )
{
grp6.add(i);
}
else if(i.intValue() > 80)
{
grp7.add(i);
}
}
int size1 = grp1.size();
System.out.println("Size 1 value"+size1);
int size2 = grp2.size();
System.out.println("Size 2 value"+size2);
int size3 = grp3.size();
System.out.println("Size 3 value"+size3);
int size4 = grp4.size();
System.out.println("Size 4 value"+size4);
int size5 = grp5.size();
System.out.println("Size 5 value"+size5);
int size6 = grp6.size();
System.out.println("Size 6 value"+size6);
int size7 = grp7.size();
System.out.println("Size 7 value"+size7);
System.out.print("After inserting into groups");
ChartSeries emp = new ChartSeries();
emp.setLabel("Employees");
emp.set("0-20", size1);
emp.set("21-40", size2);
emp.set("41-50", size3);
emp.set("51-60", size4);
emp.set("61-70", size5);
emp.set("71-80", size6);
emp.set("80+", size7);
categoryModel.addSeries(emp);
}
}
上面的代码在其逻辑中并不完整,因为我无法找到一种方法。 如何将员工划分为每个部门的不同年龄类别?
更新:我认为我在解释中并不清楚,但我想要的是将员工划分为每个部门的不同年龄类别的方法。我没有提到代码区外的for循环错误,因为这不是我的主要问题。对不起,不太清楚
答案 0 :(得分:0)
你在问自己的问题时并不是很清楚(事实证明我试图在这里解决错误的问题),但看起来你有点误用了那里的第二个for
循环。
for(String s: employee.keySet()){
for(Integer i : employee.get(s))
...
第一个for
循环是正确的,尽管效率不高。问题出在第二个for
循环:
for(Integer i : employee.get(s))
如果查看在线javadoc,您会看到get()
返回与您传入的密钥对应的值。因此,在您的情况下,employee.get(s)
会返回Integer
个对象。尝试迭代单个Integer
对象是没有意义的。你可能只想做
Integer i = employee.get(s).
代替。
一种可能更有效的方法是迭代HashMap.entrySet()
。这样,您可以一次性获得姓名和年龄,而无需再次检查HashMap
年龄。所以像这样:
for (Map.Entry<String, Integer> entry : employee.entrySet()) {
String s = entry.getKey();
Integer i = entry.getValue();
// Rest of code here
}
希望有所帮助!