#java #python #itertools
#java #python #python-itertools
Вопрос:
В одной из моих Java-программ мне нужно использовать именно то, что предлагает функция product из itertools, переставляя массив, повторяющий k раз.( perm=itertools.product(arr,repeat=k)
).
например для arr = [4,5] и k = 3 вывод должен быть:
(4, 4, 4)
(4, 4, 5)
(4, 5, 4)
(4, 5, 5)
(5, 4, 4)
(5, 4, 5)
(5, 5, 4)
(5, 5, 5)
Я хочу спросить, есть ли какая-либо утилита или что-то в java, что может облегчить это в java? Я искал ее через Интернет, но нигде не смог найти.
Пожалуйста, поделитесь чем-нибудь, если вы знаете, что можно было бы сделать в этом случае.
Комментарии:
1. это поможет github.com/samagra14/itertools_java
2. Спасибо за предоставление ресурса. Я предполагаю, что функции, которую я искал, там нет
3. какая функция?
4. Функции Product, ее там нет.
5. @VipulTyagi это здесь: github.com/samagra14/itertools_java/blob/master/src /…
Ответ №1:
Попробуйте это:
Я использовал код python itertools.product в качестве ссылки.
public class Util {
public static <T> List<Collection<T>> product(Collection<T> a, int r) {
List<Collection<T>> result = Collections.nCopies(1, Collections.emptyList());
for (Collection<T> pool : Collections.nCopies(r, new LinkedHashSet<>(a))) {
List<Collection<T>> temp = new ArrayList<>();
for (Collection<T> x : result) {
for (T y : pool) {
Collection<T> z = new ArrayList<>(x);
z.add(y);
temp.add(z);
}
}
result = temp;
}
return resu<
}
public static void main(String[] args) {
product(List.of(4, 5), 3).forEach(System.out::println);
}
}
Вывод:
[4, 4, 4]
[4, 4, 5]
[4, 5, 4]
[4, 5, 5]
[5, 4, 4]
[5, 4, 5]
[5, 5, 4]
[5, 5, 5]