Чтобы вычислить декартово произведение двух наборов в Java, вы можете использовать разные подходы. Вот несколько методов, которые вы можете рассмотреть:
Метод 1: вложенные циклы
Один простой метод – использовать вложенные циклы для перебора каждого элемента двух наборов и создания всех возможных комбинаций.
import java.util.*;
public class CartesianProduct {
public static <T> Set<Set<T>> cartesianProduct(Set<T> setA, Set<T> setB) {
Set<Set<T>> product = new HashSet<>();
for (T a : setA) {
for (T b : setB) {
Set<T> pair = new HashSet<>();
pair.add(a);
pair.add(b);
product.add(pair);
}
}
return product;
}
public static void main(String[] args) {
Set<Integer> setA = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Integer> setB = new HashSet<>(Arrays.asList(4, 5));
Set<Set<Integer>> result = cartesianProduct(setA, setB);
System.out.println(result);
}
}
Метод 2: Stream API
Вы также можете использовать Stream API Java 8 для вычисления декартова произведения.
import java.util.*;
import java.util.stream.Collectors;
public class CartesianProduct {
public static <T> Set<Set<T>> cartesianProduct(Set<T> setA, Set<T> setB) {
return setA.stream()
.flatMap(a -> setB.stream()
.map(b -> new HashSet<>(Arrays.asList(a, b))))
.collect(Collectors.toSet());
}
public static void main(String[] args) {
Set<Integer> setA = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Integer> setB = new HashSet<>(Arrays.asList(4, 5));
Set<Set<Integer>> result = cartesianProduct(setA, setB);
System.out.println(result);
}
}
Эти методы дадут вам декартово произведение двух наборов. Декартово произведение — это набор всех возможных упорядоченных пар (a, b), где a — элемент из первого набора, а b — элемент из второго набора.