设A= {1,2,3}。目标是计算AxA上的所有双射。它应该是Set>类型,以便在驱动程序代码中,我们可以使用“应用”函数。
我已经做了很多尝试,也发现双射将是集合A的排列,并且也计算了这一点,但是我无法编写代码来为此创建一组函数(映射)。
这是一项家庭作业,任何提示都将不胜感激。此外,我们还必须使用Java 8函数式编程特性。
发布于 2022-04-21 23:09:32
尝尝这个。
public static <T> Set<Function<T, T>> bijectionsOf(Set<T> set) {
ArrayList<T> domain = new ArrayList<>(set);
return permutations(domain, new ArrayList<>(), set.size(), 0)
.stream()
.map(list -> (Function<T, T>) t -> list.get(domain.indexOf(t)))
.collect(Collectors.toSet());
}产出:
1 --> 1; 2 --> 3; 3 --> 2;
1 --> 3; 2 --> 2; 3 --> 1;
1 --> 2; 2 --> 1; 3 --> 3;
1 --> 3; 2 --> 1; 3 --> 2;
1 --> 1; 2 --> 2; 3 --> 3;
1 --> 2; 2 --> 3; 3 --> 1;https://stackoverflow.com/questions/71961296
复制相似问题