Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Рандомный обход элементов без повторений

junit
selenium
webdriver
testng
java
Теги: #<Tag:0x00007f7b61dd5b60> #<Tag:0x00007f7b61dd58b8> #<Tag:0x00007f7b61dd5688> #<Tag:0x00007f7b61dd54d0> #<Tag:0x00007f7b61dd52f0>

(Kosmos) #1

Добрый день.

Есть повторяющиеся элементы (в <tr>) в который содержится checkbox (как в почте, например GMail). Мне нужно рандомно обойти элементы. Когда генерируется случайное число - оно может повториться в цикле и отметить уже отмеченный элемент.

Например, список из 20 элементов. Должно отметиться 5 случайных элементов. И случайно элемент с каким-то индексом выпал 2 раза. Т.е. по факту будет отмечено 4 элемента. Решил для этого сохранять в <List> уже выбранные элементы, только как-то не хочет работать и, имхо, не красивое решение (создавать целый массив для этого и совершать доп. операции!). Код:

count = random.nextInt(maxCount);
System.out.println("rand is: " + count);

for (int i = 1; i <= count; i++) {
            int index = random.nextInt(maxCount);
            setCheckBoxStatus(elements.get(index), true);
}

Как можно сделать более красивое и менее ресурсозатратное решение?

Спасибо.


(Goshko Nazar) #2

используйте метод remove для работы с массивом, то есть при взятии елемента, удаляйте его из массива


#3

На сколько я знаю в java нету метода remove для работы с массивами


(Goshko Nazar) #4

int[] removed = ArrayUtils.removeElement(intArray, 3);

Тогда стек машину, или FIFO на java нельзя реализовать?


#5

Можно сделать костылём не красивым но не трудозатратным не проблемным.

Заменить элементы по индексу на минусовые значения


#6

Так можно, но вроде как человек хочет что бы всё проще было


(Goshko Nazar) #7

используйте shuffle для массива от 0 до 20, и забирайте первых 5 элементов


(Aleksey Ilyenko) #8
        Collections.shuffle(list);
        list.stream()
            .limit(count)
            .forEach(element -> doSomeAction(element));