Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите HashMap действия с ключом и значением

Discussion in 'Разработка плагинов для новичков' started by Korvinius, Dec 21, 2014.

  1. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    О боже, зачем вставлять строку, а потом удалять её? Попробуйте включить голову.
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Trophy Points:
    88
    :oops: попытаюсь:
    Code:
           for(Map.Entry<String, String> entry : NoMult.instance.mult.entrySet()) {  
               if(entry.getValue().equals(ip) && !entry.getKey().eguals(p)) {
                   String a = entry.getKey();
                   String b = entry.getValue();
                    tempmult.put(a, b);   
               }
            }
     
  4. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Браво! Теперь надо вынести переменные за условие чтобы не использовать их зря.
     
  5. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Trophy Points:
    88
    спасибо большое :)
     
  6. Shevchik

    Shevchik Старожил Пользователь

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    Жабакомпайлер сделает это за тебя.
     
  7. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    Код в любом случае должен быть красивым.
     
  8. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Trophy Points:
    88
    Прошу совета еще по одному вопросу:
    есть 3 переменные HashMap - hashmap1, hashmap2, hashmap3. Нужно в hashmap1 по порядку выбирать все значения (value1), получать по ним ключи и проверить наличие этих ключей в hashmap2 и hashmap3.

    Как это лучше и правильнее организовать?
    Я пробовал это сделать так:
    Code:
        public boolean hasCheck(String m, String n, String l) {
            String c = null;
            for(Map.Entry<String, String> entry : itemsm1.entrySet()) {
                if (entry.getValue().equals(m)) {
                    c = entry.getKey();
                    for(Map.Entry<String, String> entry2 : itemsm2.entrySet()) {
                        if (entry2.getKey().equals(c)) {
                            for(Map.Entry<String, String> entry3 : itemsm2.entrySet()) {
                                if (entry3.getKey().equals(c)) {
                                    return true;
                                }
                            }
                        }
                    }
                }
            }
            return false;
        }
    но, судя по всему, я делаю что то совсем не то, так как результат всегда false.
     
  9. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    У Map есть метод containsKey()
     
  10. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Trophy Points:
    88
    пробовал еще раньше это:
    Code:
        public boolean isCheck(String m) {
            String c = null;
            for(Map.Entry<String, String> entry : itemsm1.entrySet()) {
                if (entry.getValue().equals(m)) {
                    c = entry.getKey();
                    if (itemsm2.containsKey(c)) {
                        if (itemsm3.containsKey(c)) {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
    результат такой же.
     
  11. serega6531

    serega6531 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    А такие ключи есть в мапе? Посмотрите в отладчике.
     
  12. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Trophy Points:
    88
    хотя нет, там было немного по другому, здесь я чуть подправил, пойду перепроверю
     
  13. Reality_SC

    Reality_SC Старожил Пользователь

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Код выглядит рабочим, нужно проверять входные данные. Я бы только определял переменную c в более узкой области видимости. А зачем нужна такая логика? Нельзя сделать проще.
     
  14. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Trophy Points:
    88
    да наверное можно и проще, это как бы экспериментирую... Пытаюсь найти оптимальное решение для одной старой идеи)))[DOUBLEPOST=1421433324,1421432458][/DOUBLEPOST]
    Может подскажете, как организовать проверку предметов, по Material, DisplayName, Lore и при этом учесть возможное отсутствие у предмета DisplayName и/или Lore?
     
    Last edited: Jan 16, 2015
  15. Reality_SC

    Reality_SC Старожил Пользователь

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Если DisplayName/Lore нету, это означает попадание предмета в нужную категорию, или наоборот — они должны быть и должны быть определёнными?[DOUBLEPOST=1421474282,1421474178][/DOUBLEPOST]if(item.getMaterial().equals(Material.КАКОЙ-ТО) && "Нужный DN".equals(item.getDisplayName()) && "Нужный Lore".equals(item.getLore()) { ... }
    Извини, пишу на псевдо языке, нет IDE под рукой.
     
  16. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Trophy Points:
    88
    нет, это я знаю, я имел ввиду другое, смысл в том, что есть конфиг, в котором данные, чтобы проще, примерно так:
    Code:
    xxx1:
        material: xxx
        DP: xxx
        Lore: xxx
    xxx2:
        material: xxx
        DP: xxx
        Lore: xxx
    xxx3:
        material: xxx
        DP: xxx
        Lore: xxx
    
    так я имею ввиду, каким образом лучше обрабатывать их для сравнения? Пробовал склеивать все в одну строку: (material+DP+Lore), передать в HashSet и сравнивать с нужным, пробовал делать три переменных hashMap, где ключ: key=хешкод от (material+DP+Lore), общий для всех переменных, а значение, первый hashMap: value=material, второй hashMap: value=DP, третий hashMap: value=Lore. Но такой вариант мне кажется лишний и не нужный, вот и думаю, как лучше это организовать...
     
  17. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Будем честными, до тех пор пока кол-во данных для сравнения меньше нескольких миллионов - сравнивайте как вам удобно.
     
  18. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Trophy Points:
    88
    понял, спасибо))
     
  19. ptnk

    ptnk Старожил Пользователь

    Trophy Points:
    173
    20 тиков в секунду = по 50ms на 1 тик. Думаешь 50ms хватит на все прочие дела сервера и на пол ляма сравнений?

    Ребят, нужно читать умные книжечки по программировани: книжечки по Java (чтобы знать как работают самые простые вещи) и книжечки по ООП (чтобы в программе фигурировали объекты и классы, а не вложенные Map'ы в друг дружку).

    Без лишних итераций, без лишних функций, самая быстрая проверка соответсвия одного объекта куче других объектов:
    https://gist.github.com/ptnkjke/aa79039e475f95c2fa06
     
  20. Reality_SC

    Reality_SC Старожил Пользователь

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    Вот, камрад выше дельный код показал. Плюсую ему.
     
  21. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Trophy Points:
    88
    Спасибо!
     

Share This Page