gpt4 book ai didi

java - 在 Java-8 中生成组合的通用方法

转载 作者:行者123 更新时间:2023-12-02 09:11:48 24 4
gpt4 key购买 nike

在一次编码考试中,我偶然发现了一个问题,我必须对 5 个整数的组合执行一些操作。

我通过动态规划解决了这个问题,solution没问题并被接受。

回到家后,我开始思考是否有任何方法可以使用流生成这些组合。

嗯,我想了一段时间,对于 2 个字符串,我能够使用 flatmap 生成组合。 .

List<String> list = Arrays.asList("A", "B");
List<String> combinations =
list.stream()
.flatMap(str1 -> list.stream().map(str2 -> str1 + str2))
.collect(toList());
System.out.println(combinations);

输出符合预期:

[AA, AB, BA, BB]

I am wondering is there any way to generate combinations for Arrays.asList("A", "B","C"); , Arrays.asList("A", "B","C","D",E); by controlling the number of time stream will repeat?

当我为 Arrays.asList("A", "B","C","D",E); 生成 SET{A/C to math} 时我应该得到[A],[B],[C],[D]…..,[A,B]…,[A,B,C]…[A,B,C,D]。

我想要一种通用的方法,通过它可以获取由一个元素组成的一组元素,由两个元素组成的集合......等等。___________________________________________________________________________-

除了上面的疑问,我想知道在用 flatmap 生成集合时里面flatmap我能够得到 AA , BB , AB , BA ,虽然它与集合的基本数学定义相矛盾,在数学中 AB 或 BA 只是一个集合。如何克服这个问题?

最佳答案

不要认为将所有内容都塞进流中是个好主意。循环和递归没有任何问题。

也就是说,如果你真的愿意,你可以这样做:

    List<String> list = Arrays.asList("A", "B", "C");
List<String> combinations = list.stream()
.reduce(Collections.<String>emptyList(),
(sets, item) -> {
return Stream.of(
sets.stream(),
Stream.of(item),
sets.stream().map(str->str+item)
).flatMap(x->x).collect(Collectors.toList());
},
(sets, sets2) -> {
throw new UnsupportedOperationException(
"Impossible error in sequential streams");
}
);
System.out.println(combinations);

关于java - 在 Java-8 中生成组合的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59354514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com