Java流按条件减少多个列表

Java流按条件减少多个列表,java,list,java-8,java-stream,reduce,Java,List,Java 8,Java Stream,Reduce,在Java1.8或更高版本上,是否可以减少列表的列表 当数字总和不能超过8时,我需要数字数组 示例:我有以下列表:[2,4,6]。 返回值可以是[[2,4]、[6]]或[[2,6]、[4]] 我尝试了以下方法: List nums=Arrays.asList(2,4,6); nums.stream() .过滤器((p)->p{ int sumS1=s1.stream().reduce(0,(n1,n2)->n1+n2); 如果(sumS1==8)返回s1; int sumS2=s1.stream

在Java1.8或更高版本上,是否可以减少列表的列表

当数字总和不能超过8时,我需要数字数组

示例:我有以下列表:[2,4,6]。 返回值可以是[[2,4]、[6]]或[[2,6]、[4]]

我尝试了以下方法:

List nums=Arrays.asList(2,4,6);
nums.stream()
.过滤器((p)->p{
int sumS1=s1.stream().reduce(0,(n1,n2)->n1+n2);
如果(sumS1==8)返回s1;
int sumS2=s1.stream().reduce(0,(n1,n2)->n1+n2);

if(sumS1+sumS2如果要从所有组合中找到满足条件的组合

List<Integer> list = Arrays.asList(2, 4, 6);
List<List<Integer>> result = IntStream.range(0, 1 << list.size())
    .mapToObj(i -> IntStream.range(0, list.size())
        .filter(j -> (1 << j & i) != 0)
        .mapToObj(list::get)
        .collect(Collectors.toList()))
    .filter(x -> x.stream().mapToInt(i -> i).sum() < 8)
    .collect(Collectors.toList());
System.out.println(result);

如果要从所有组合中找到满足条件的组合

List<Integer> list = Arrays.asList(2, 4, 6);
List<List<Integer>> result = IntStream.range(0, 1 << list.size())
    .mapToObj(i -> IntStream.range(0, list.size())
        .filter(j -> (1 << j & i) != 0)
        .mapToObj(list::get)
        .collect(Collectors.toList()))
    .filter(x -> x.stream().mapToInt(i -> i).sum() < 8)
    .collect(Collectors.toList());
System.out.println(result);

Java Streams是错误的工具。这个问题可能需要用递归实现。Java Streams是错误的工具。这个问题可能需要用递归实现。