【发布时间】:2018-05-07 11:18:28
【问题描述】:
我创建了一个名为 (ObjClass) 的自定义类。
-
我在 LinkedHashMap 中插入自定义类名称而不是值。像下面这样:
LinkedHashMap 映射 = 新 LinkedHashMap;
-
我在 ObjClass 中有以下 getter 和 setter,名称有
私有字符串名称;
私有 int 级别;
私有字符串父级;
现在的问题是,当我尝试通过比较特定字段(如未执行的名称)来获取密钥时。
我的代码如下:
public class Practice {
LinkedHashMap<Integer,ObjClass> map = new LinkedHashMap<>();
public void addd(){
int a = 10;
int b = 20;
int c = 30;
ObjClass bb = new ObjClass();
bb.setName("COLOR");
bb.setParent("ROOT");
bb.setLevel(1);
bb.getName();
bb.getParent();
bb.getLevel();
map.put(a, bb);
bb.setName("RED");
bb.setParent("COLOR");
bb.setLevel(2);
bb.getName();
bb.getParent();
bb.getLevel();
map.put(b, bb);
bb.setName("WHITE");
bb.setParent("COLOR");
bb.setLevel(2);
bb.getName();
bb.getParent();
bb.getLevel();
map.put(c, bb); here
// the problem is in the for loop i try to get the key of "red" which is 20 but my loop is not working..
for (Map.Entry<Integer, ObjClass> entry : map.entrySet()) {
if(entry.getValue().getName().equals("RED"))
{
System.out.println("yes"+ entry.getKey());
}
}
System.out.println(" "+map.size());
}
public static void main(String[] args) {
Practice pp = new Practice();
pp.addd();
}}
【问题讨论】:
-
我试图通过比较 entry.setValue.getName 来获得红色的键,但它没有工作,它应该返回 20 的键。
-
如果你想通过名字访问你的地图值,为什么不把名字作为键呢?
-
@vanje 这很容易,但不幸的是我正在做一个项目,这就是为什么我想通过输入上面代码中提到的特定值(如“red”)来获取密钥的原因将返回“red”的键。
-
你总是把同一个 bb 实例放到地图上。您需要创建一个新的 bb 实例。向集合中插入内容时,Java 不会创建副本。
-
我是 java 新手,感谢@ZabojCampula。请看一下这个问题stackoverflow.com/questions/50238904/…
标签: java netbeans foreach linkedhashmap