[英]Java: To divide an integer array into sub-arrays with random values?
[英]divide array in to sub arrays java 8
我有一个像1,2,3,4的数组需要分成
int [] array = { 1, 2, 3 , 4}
for( int i= 0; i < array .length-0; i ++) {
Integer[] intArrays = array .stream().toArray(Integer[]::new);
//processing with stream
}
123, 234,34,4
sum of the each grouping
1+2+3 =6
2+3+4 = 9
3+4 = 7
4=4
我可以用Java传统方式做到这一点,但需要使用Java 8流概念来实现
你能帮我做到吗
我假设请求是将每个分组限制为3个元素。 如果是这样的话,
List<Integer> l = Arrays.asList(1, 2, 3, 4);
for (int i = 0; i < l.size(); i++) {
l.set(i, l.stream().skip(i).limit(3).mapToInt(Integer::intValue).sum());
}
如果您实际希望得到以下结果,则可能会有些复杂:
1+2+3 =6
2+3+4 = 9
3+4 = 7
4=4
在这种情况下,您可以按照以下步骤进行操作:
String result = IntStream.range(0, array.length)
.mapToObj(i -> Arrays.stream(array).skip(i).limit(Math.min(3, array.length-i)).toArray())
.map(a -> String.join("+",
Arrays.stream(a).mapToObj(String::valueOf).toArray(String[]::new)) + "=" +
Arrays.stream(a).sum())
.collect(Collectors.joining("\n"));
System.out.println(result);
或如下:
IntStream.range(0, array.length)
.mapToObj(i -> Arrays.stream(array).skip(i).limit(Math.min(3, array.length-i)).toArray())
.map(a -> String.join("+",
Arrays.stream(a).mapToObj(String::valueOf).toArray(String[]::new)) + "=" +
Arrays.stream(a).sum())
.forEachOrdered(System.out::println);
但是,如果预期结果可以像打印每个组求和的结果一样简单,则可以执行以下操作:
IntStream.range(0, array.length)
.map(i -> Arrays.stream(array).skip(i).limit(Math.min(3, array.length-i)).sum())
.forEachOrdered(System.out::println);
说明:
第一个代码段使用Instream.range生成源数组的索引,然后在mapToObj操作中跳过必需数量的元素,仅保留必需数量的元素。 然后使用map
将每个组中的元素连接起来,并计算它们的总和,然后以所需的格式获取元素,最后,将字符串与连接收集器连接起来 。
第二个代码段执行相同的操作,但是不是将字符串与联接收集器联接在一起,而是将它们打印到控制台。
最后一种方法在映射方面做类似的事情,但是只关心每个组求和的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.