Tel J'écrirai un article car il doit y avoir une demande de combinaisons, pas de commande. Au sein de notre entreprise, ce petit code est utilisé pour les produits qui combinent plusieurs produits financiers pour créer un portefeuille, puis sélectionnez celui avec de bonnes propriétés. Le principe de fonctionnement est presque le même que ci-dessus.
Combination.java
private enum Operation {add, remove};
private static<T> Set<T> apply(Set<T> src, Operation operation, T item) {
Set<T> result = new HashSet<T>(src);
if (Operation.add == operation) result.add(item);
if (Operation.remove == operation) result.remove(item);
return result;
}
private static<T> Set<Set<T>> _combination(Set<T> selected, int depth, Set<T> pool) {
if (depth == 0) return apply(new HashSet<>(), Operation.add, selected); //Renvoie l'ensemble que seuls les sélectionnés ont dans l'élément
Set<Set<T>> result = new HashSet<Set<T>>();
for (T item : pool) {
result.addAll(
_combination(
apply(selected, Operation.add, item), //Changer l'élément en sélectionné
depth - 1,
apply(pool, Operation.remove, item) //Retirer de la piscine
)
);
}
return result;
}
public static<T> Set<Set<T>> combination(Set<T> src, int k) {return _combination(new HashSet<T>(), k, src);}
Comme ça.
Main.java
public static void main(String[] args) {
Set<Integer> src = new HashSet<Integer>() {{
add(0); add(1); add(2); add(3); add(4); add(5);
}};
System.out.println(combination(src, 2)); //Liste tous les ensembles obtenus en extrayant deux des ensembles ci-dessus
}