получить ключ, сравнив значение в LinkedHashMap - PullRequest
0 голосов
/ 07 мая 2018
  1. Я создал пользовательский класс с именем (ObjClass).

  2. Я вставляю имя пользовательского класса вместо значения в LinkedHashMap. Как следующее:

    LinkedHashMap map = new <> LinkedHashMap;

  3. У меня есть следующие getter и setter в ObjClass, там есть имена

    личное строковое имя;

    частный 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();

    }} 

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Вы предоставляете только один экземпляр для всех входов LinkedHashMap. Проверьте обновленный код.

import java.util.LinkedHashMap;
import java.util.Map;

public class Main {
    Map<Integer, ObjClass> lMap  = 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();
       lMap.put(a, bb);

       bb = new ObjClass();       
bb.setName("RED");
bb.setParent("COLOR");
bb.setLevel(2);       
bb.getName();
bb.getParent();
bb.getLevel();
lMap.put(b, bb);

bb = new ObjClass();
bb.setName("WHITE");
bb.setParent("COLOR");
bb.setLevel(2);        
bb.getName();
bb.getParent();
bb.getLevel();
lMap.put(c, bb);


    // 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 : lMap.entrySet()) {
        //System.out.println(entry.getKey() + "-" + entry.getValue().getName());
        if(entry.getValue().getName().equals("RED"))
        {
            System.out.println("yes"+ entry.getKey());

        }
    }
    System.out.println("    "+lMap.size());

    }
        public static void main(String[] args) {

               Main pp = new Main();
               pp.addd();

    }

}

Вам нужно инициализировать его снова.

bb = new ObjClass();
0 голосов
/ 07 мая 2018

В Java, когда все переменные объекта являются ссылками. В результате ваша переменная bb изменяется с последним значением. См. Исправленный код следующим образом:

import java.util.LinkedHashMap;
import java.util.Map;

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 = new ObjClass();

        bb.setName("RED");
        bb.setParent("COLOR");
        bb.setLevel(2);
        bb.getName();
        bb.getParent();
        bb.getLevel();
        map.put(b, bb);

        bb = new ObjClass();
        bb.setName("WHITE");
        bb.setParent("COLOR");
        bb.setLevel(2);
        bb.getName();
        bb.getParent();
        bb.getLevel();
        map.put(c, bb);

        // 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();

    }
}

также см. Является ли Java «передачей по ссылке» или «передачей по значению»?

0 голосов
/ 07 мая 2018

Поскольку у вас есть только один экземпляр ObjClass, имя которого перезаписывается как WHITE

...