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

Java-8中生成组合的通用方法,java,algorithm,java-8,combinations,Java,Algorithm,Java 8,Combinations,在一次编码考试中,我偶然发现了一个问题,我必须对5个整数的组合执行一些运算 我用动态规划法解决了这个问题,结果很好,被接受了 回到家后,我开始思考是否有任何方法可以使用流生成这些组合 好吧,我想了一会儿,对于2个字符串,我可以使用生成组合 我想知道是否有任何方法可以为 Arrays.asList(“A”、“B”、“C”),数组。asList(“A”、“B”、“C”、“D”、“E”)按 控制时间流将重复的次数 当我为Arrays.asList(“A”、“B”、“C”、“D”、“E”)生成集合{A/

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

我用动态规划法解决了这个问题,结果很好,被接受了

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

好吧,我想了一会儿,对于2个字符串,我可以使用生成组合

我想知道是否有任何方法可以为
Arrays.asList(“A”、“B”、“C”)
数组。asList(“A”、“B”、“C”、“D”、“E”)按
控制时间流将重复的次数

当我为
Arrays.asList(“A”、“B”、“C”、“D”、“E”)生成集合{A/C to mathematics}时
我应该得到[A],[B],[C],[D],[A,B],[A,B,C],[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);
List List=Arrays.asList(“A”、“B”、“C”);
列表组合=List.stream()
.reduce(Collections.emptyList(),
(套,项目)->{
回流(
set.stream(),
(项目)的流量,
set.stream().map(str->str+项)
).flatMap(x->x).collect(collector.toList());
},
(集合,集合2)->{
抛出新的UnsupportedOperationException(
“连续数据流中不可能出现的错误”);
}
);
系统输出打印项次(组合);

你能举例说明你的意思吗?这一部分通过控制时间流的重复次数来实现,我并不清楚。您使用的是
List
String
,它们都没有远程连接到set的数学定义,甚至连Java的
set
定义都没有。你可以通过使用合适的工具来解决这个问题。你只做了
concat
的二次归约函数与另一个函数的逻辑不匹配。哦,你的意思是我没有写叉积是没有充分理由的。你说得对。我会编辑使它消失。。。
[AA, AB, BA, BB]
    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);