当前位置: 代码迷 >> java >> 如何将 HashMap.getKey() 转换为 Int
  详细解决方案

如何将 HashMap.getKey() 转换为 Int

热度:56   发布时间:2023-07-26 14:28:41.0

我有一个存储出勤信息的 HashMap。 我只想将 Key 转换为 Int 并检查条件。

下面是我的代码:

import java.util.*;

public class HashClass {

    public static void main(String args[]) {

        HashMap<Integer, String> attendanceHashMap = new HashMap<Integer, String>();
        attendanceHashMap.put(1, "John");
        attendanceHashMap.put(2, "Jacob");
        attendanceHashMap.put(3, "Peter");
        attendanceHashMap.put(4, "Clara");
        attendanceHashMap.put(5, "Philip");

        for(HashMap.Entry m:attendanceHashMap.entrySet()){
            if(Integer.valueOf((int)m.getKey())<3) break;
            System.out.println(m.getKey()+" "+m.getValue());
        }
    }
}

我想这样打印

3 Peter
4 Clara
5 Philip

我尝试了这些方法:

 - (int)m.getKey() : not working
 - Integer.valueOf((int)m.getKey()) : not working
 - Integer.valueOf(m.getKey()) : not working

这是如何实现的?

你是说:

if(Integer.valueOf((int)m.getKey())<3) break;

换句话说,如果您遇到的第一个键恰好小于 3,则终止循环,因此不打印任何内容。 最有可能的是,您想使用continue来处理下一个条目:

for(HashMap.Entry m:attendanceHashMap.entrySet()){
    if(Integer.valueOf((int)m.getKey())<3) continue;
    System.out.println(m.getKey()+" "+m.getValue());
}

但请注意,类型转换已过时。 只需将缺少的类型参数添加到条目中:

for(HashMap.Entry<Integer,String> m:attendanceHashMap.entrySet()){
    if(m.getKey()<3) continue;
    System.out.println(m.getKey()+" "+m.getValue());
}

但是让打印语句有条件而不是使用循环控制可能会更清楚:

for(HashMap.Entry<Integer,String> m:attendanceHashMap.entrySet()){
    if(m.getKey()>=3) {
        System.out.println(m.getKey()+" "+m.getValue());
    }
}

作为旁注,不能保证打印条目的顺序。 如果LinkedHashMap插入顺序打印条目,请使用LinkedHashMap

HashMap<Integer, String> attendanceHashMap = new LinkedHashMap<>();
attendanceHashMap.put(1, "John");
attendanceHashMap.put(2, "Jacob");
attendanceHashMap.put(3, "Peter");
attendanceHashMap.put(4, "Clara");
attendanceHashMap.put(5, "Philip");
// printing code follows...

为了完整起见,Java 8 解决方案:

attendanceHashMap.forEach((k,v) -> { if(k>=3) System.out.println(k+" "+v); });

您的第一个问题是您使用的是原始Entry类型。 将其替换为

for(HashMap.Entry<Integer, String> m: ...)

现在m.getKey()将有一个Integer类型,它可以隐式转换为int没有任何问题: if(m.getKey()<3)

另一个问题是您使用的是break而不是continue

if(m.getKey()<3) continue;

整个固定循环:

for(HashMap.Entry<Integer, String> m:attendanceHashMap.entrySet()){
    if(m.getKey()<3) continue;
    System.out.println(m.getKey()+" "+m.getValue());
}

永远不要使用原始类型。 这只是兼容性的残余。

您的意思是您不想显示 key < 3 的条目,我认为当您运行此代码时,您将一无所获,因为当 key = 1 ,key < 3 = true 并且循环中断时,它们不会继续,您可以尝试继续而不是休息

  相关解决方案