gpt4 book ai didi

java - 如何将整数拆分为许多除法器及其余数的列表

转载 作者:行者123 更新时间:2023-12-01 18:51:28 27 4
gpt4 key购买 nike

我想创建集合(或立即Stream),对于给定的整数创建包含其 n 个分隔符和余数的集合。下面是创建此内容的简单代码:

int initValue = 151;
int chanckValue = 50;

List<Integer> ints = new ArrayList<>();
int value = initValue;
while (value > chanckValue) {
ints.add(chanckValue);
value = value - chanckValue;
}
ints.add(value);

System.out.println(ints);

输出是:

[50, 50, 50, 1]

怎样才能用Stream做到理想呢?最好以紧凑的方式。

更新

这只是用法示例。第二张图中的乘法可以用任何运算代替:

Stream.of(3, 54, 150, 151, 230)
.map(value -> {
List<Integer> ints = new ArrayList<>();
while (value > chanckValue) {
ints.add(chanckValue);
value = value - chanckValue;
}
ints.add(value);
return ints;
})
.map(l -> l.stream()
.map(v -> v * v)
.collect(Collectors.toList())
)
.forEach(System.out::println);

最佳答案

您可以使用Stream.flatMapStream.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);
}

然后像这样调用上面的方法

Stream.of(3, 54, 150, 151, 230).flatMap(v -> chunkval(v,chanckValue)).collect(Collectors.toList()).forEach(System.out::println);

关于java - 如何将整数拆分为许多除法器及其余数的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59731549/

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