Комментарии 16
Ой все. Ну давайте еще алгоритмы сортировки сюда постить.
На Java не писал лет 15, но какая разница…
Ну правда — ввожу в гугл "java permutations" и первая же ссылка достаточно подробно все объясняет.
Бонусом получаем ссылку на алгоритм Хипа, а при дальнейшем гуглении еще находится Алгоритм Нарайаны.
Заодно находится ссылка на хабр где можно почитать комментарии и понять что стоит подготовиться объяснить за производительность.
… а что, в Java нельзя такое сделать без создания дополнительной коллекции, просто возвращая итератор?
Во-первых, я говорю о выходных данных, где у вас List
, а не о входных.
А во-вторых, я подозреваю, что и для входных вам не надо двигаться назад (вот множественная итерация может понадобиться, да).
Вернуть итератор мы можем, но новую коллекцию все равно придется создать.
Зачем? Java не умеет итераторы без коллекций?
комбинирование нескольких множеств с получением новых
Вот вам "комбинирование двух множеств" без создания коллекции (не на Java):
foreach (var c1 in collection1)
foreach (var c2 in collection2)
yield return (c1, c2)
Хорошо видно, что коллекция для хранения результата целиком не нужна.
Я видимо избалован Python — itertools.product() и все готово.
и работает год?)
Нет, это встроенная функция. Она не интерпретируется, а потому отработает быстро.
А guava чем не устраивает?
var models = ImmutableSet.of("audi", "bmw", "toyota", "vw");
var colors = ImmutableSet.of("red", "green", "blue", "yellow", "pink");
var engines = ImmutableSet.of("diesel", "gasoline", "hybrid");
var transmissions = ImmutableSet.of("manual", "auto", "robot");
Sets.cartesianProduct(models, colors, engines, transmissions).forEach(System.out::println);
Как получить все возможные комбинации элементов группы массивов