Помогите Получить индекс объекта в Set

Статус
Закрыто для дальнейших ответов.
Множество (Set) не имеет предопределённого порядка, соответственно к его содержимому неприменимо понятие "индекс".
 
Это проверка содержания объекта. А мне надо получить его индекс.
Код:
    public static <T> T getIndex(Set<T> sets, int i) {
        int x = 0;
        for(Object set : sets) {
            if(x==i) {
                return (T) set;
            }
            x++;
        }
        throw new IndexOutOfBoundsException();
    }
Но это сработает только на LinkedHashSet. Простой HashSet не имеет порядка.
 
Код:
    public static <T> T getIndex(Set<T> sets, int i) {
        int x = 0;
        for(Object set : sets) {
            if(x==i) {
                return (T) set;
            }
            x++;
        }
        throw new IndexOutOfBoundsException();
    }
Но это сработает только на LinkedHashSet. Простой HashSet не имеет порядка.
Я думаю если прикастовать интерфейс set к linkedhashset то можно что-то получить.
 
Я думаю если прикастовать интерфейс set к linkedhashset то можно что-то получить.
Вот те же дал решение. Юзаешь Set<String> sets = new LinkedHashSet<String>();. Все.
А простой HashSet не имеет порядка и выдаст рандомную последовательность при переборе..
 
Юзать List ТС'у религия не позволит? 🙄
Не поверишь, позволит. Я уже всё листом и без сетов сделал. Сделал класс для хранения данных сделал метод, который будет индексы char'ов делать и сделал лист этих классов. Через foreach достал нужный объект и всё.P.s Просто делаю утилиту для создания крафтов с ItemStack'ами, закрываю тему! P.s.s Блин, Stream API удобная штука.
 
Велосипед велосипедом, но кейсы я не делаю. Я уложился в 2 класса. ну и 1 интерфейс но это вспомогательное.
 
Просто делаю утилиту для создания крафтов с ItemStack'ами, закрываю тему!
Могу подарить удобный метод

Код:
    public static void addRecipe(Plugin plugin, ItemStack stack, ItemStack[] istack) {
        ShapedRecipe rc = new ShapedRecipe(new NamespacedKey(plugin, UUID.randomUUID().toString()), stack);
        rc.shape("012", "345", "678");
        for (int i = 0; i < 9; i++) {
            if (istack[i] != null && istack[i].getType() != Material.AIR)
                rc.setIngredient(String.valueOf(i).toCharArray()[0], istack[i].getType());
        }
        Bukkit.getServer().addRecipe(rc);
    }
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх