Java 如何将整数拆分为多个除数及其余数的列表

Java 如何将整数拆分为多个除数及其余数的列表,java,collections,java-8,initialization,java-stream,Java,Collections,Java 8,Initialization,Java Stream,我想创建集合(或立即创建流),该集合为给定整数创建包含其n个除数和余数的集合。下面是创建此功能的简单代码: int initValue=151; int chanckValue=50; List ints=new ArrayList(); int值=initValue; while(value>chanckValue){ 积分相加(chanckValue); value=value-chanckValue; } 积分(增值); 系统输出打印项次(ints); 输出为: [50, 50, 50,

我想创建集合(或立即创建
),该集合为给定整数创建包含其n个除数和余数的集合。下面是创建此功能的简单代码:

int initValue=151;
int chanckValue=50;
List ints=new ArrayList();
int值=initValue;
while(value>chanckValue){
积分相加(chanckValue);
value=value-chanckValue;
}
积分(增值);
系统输出打印项次(ints);
输出为:

[50, 50, 50, 1]
如何使用
?最好是以紧凑的方式

更新 这是唯一的用法示例。第二个映射中的乘法可以替换为任何操作:

Stream.of(3,54,150,151,230)
.map(值->{
List ints=new ArrayList();
while(value>chanckValue){
积分相加(chanckValue);
value=value-chanckValue;
}
积分(增值);
返回整数;
})
.map(l->l.stream()
.map(v->v*v)
.collect(收集器.toList())
)
.forEach(System.out::println);

您可以使用
stream.flatMap
stream.concat

public static Stream<Integer> chunkval(int val, int chanckValue) {
        if (val > chanckValue)
            return Stream.concat(Stream.of(chanckValue), chunkval(val - chanckValue, chanckValue));
        return Stream.of(val);
    }

从评论中总结信息。如前所述:
151/50=3
151%50=1
并提供实施示例:

int q=value/chanckValue,r=value%chanckValue;
IntStream is=IntStream.range(0,q).map(x->chanckValue);
如果(r!=0)is=IntStream.concat(is,IntStream.of(r));
使用
列表的其他方法

List ints=new ArrayList(Collections.nCopies(value/chanckValue,chanckValue));
如果(值%chanckValue!=0)整数加(值%chanckValue);
或者,如果需要添加余数,则使用推迟
ArrayList
creation

List ints=Collections.nCopies(value/chanckValue,chanckValue);
如果(值%chanckValue!=0){
ints=新阵列列表(ints);
整数相加(值%chanckValue);
}

这里不需要流。你所拥有的已经足够好了。留着吧,我同意其他人的看法。此外,声明
value
是多余的,我认为您可以使用
151/50=3
151%50=1
的知识来代替流。您关于“我需要流,因为我以后使用流”的论点是无效的,因为您以后也不需要流。有很多地方流是有用的,你不需要把它们塞进所有它们不是很有用的地方。如果你对“聪明的编程技巧”比“专业的软件开发”更感兴趣,我建议你研究执行不必要的操作是没有意义的,即使是在理论问题上。正如@Kayaman所说,只要做
int q=initValue/chanckValue,r=initValue%chanckValue提供所有相关结果。循环、流式传输或从中创建集合都不会增加任何内容。但如果你坚持要从中创造出一条流<代码>IntStream is=IntStream.range(0,q).map(x->chanckValue);如果(r!=0)is=IntStream.concat(is,IntStream.of(r))注意:从重复连接构造流时要小心。访问深度连接流的元素可能导致深度调用链,甚至StackOverflowerError。
Stream.of(3, 54, 150, 151, 230).flatMap(v -> chunkval(v,chanckValue)).collect(Collectors.toList()).forEach(System.out::println);