Rozumiem, że:
- Masz dwie tablice - array1, array2.
- Chcesz z array1 wylosować elementy, które nie występują w array2.
Teraz masz dwie opcje:
- Jeśli takich losowań jest mało to można spokojnie po prostu powtarzać raz po raz losowanie:
public static void main(final String[] args) {
String[] array1 = {"A", "B", "C", "D"};
String[] array2 = {"A", "C", "E"};
System.out.println(findElement(array1, array2));
}
static String findElement(final String[] array, final String[] values) {
String result = null;
do {
result = array[ThreadLocalRandom.current().nextInt(array.length)];
} while (isInArray(result, values));
return result;
}
static boolean isInArray(final String element, final String[] array) {
return Arrays.binarySearch(array, element, String::compareTo) >= 0;
}
- Jeśli takich losowań będzie dużo to lepiej sobie przygotować nową tablicę, która będzie zawierała elementy z tablicy
array1
, ale nie elementy z array2
:
public static void main(final String[] args) {
String[] array1 = {"A", "B", "C", "D"};
String[] array2 = {"A", "C", "E"};
String[] filtered = filterValues(array1, array2);
System.out.println(filtered[ThreadLocalRandom.current().nextInt(filtered.length)]);
}
static String[] filterValues(final String[] array, final String[] values) {
Set<String> valuesSet = Stream.of(values).collect(Collectors.toSet());
return Stream.of(array)
.filter(element -> !valuesSet.contains(element))
.toArray(String[]::new);
}