繁体   English   中英

将数组划分为子数组java 8

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM