如何将 HashMap.getKey() 转换为 Int
How to convert HashMap.getKey() to Int
我有一个存储考勤信息的 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
如何实现?
您的第一个问题是您使用的是原始 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());
}
切勿使用原始类型。这只是一个兼容性残余。
您是说:
if(Integer.valueOf((int)m.getKey())<3) break;
换句话说,如果您遇到的第一个键恰好小于三,您将终止循环,因此什么也不打印。最有可能的是,您想使用 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
:
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); });
你的意思是你不想显示 key < 3 的条目,我认为当你 运行 这段代码时你什么也得不到,因为当 key = 1 时,key < 3 = true 并且循环中断,他们不会继续你可以尝试继续而不是中断
我有一个存储考勤信息的 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
如何实现?
您的第一个问题是您使用的是原始 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());
}
切勿使用原始类型。这只是一个兼容性残余。
您是说:
if(Integer.valueOf((int)m.getKey())<3) break;
换句话说,如果您遇到的第一个键恰好小于三,您将终止循环,因此什么也不打印。最有可能的是,您想使用 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
:
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); });
你的意思是你不想显示 key < 3 的条目,我认为当你 运行 这段代码时你什么也得不到,因为当 key = 1 时,key < 3 = true 并且循环中断,他们不会继续你可以尝试继续而不是中断