Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java流将整数列表划分为3个部分,并将每个部分相加_Java_Java 8 - Fatal编程技术网

Java流将整数列表划分为3个部分,并将每个部分相加

Java流将整数列表划分为3个部分,并将每个部分相加,java,java-8,Java,Java 8,我需要将整数列表分成相等的部分,并打印每个数组的和 例[4,2,3,4,1,1,1,2,1] 除以[4,2,3]、[4,1.1]、[1,2,1]和每个最终输出的总和964 需要使用Java8流api吗 AtomicInteger counter = new AtomicInteger(0); Integer[] array = {4, 2, 3, 4, 1, 1, 1, 2, 1}; Arrays.asList(array).stream().collect(Collectors.grou

我需要将整数列表分成相等的部分,并打印每个数组的和

例[4,2,3,4,1,1,1,2,1]

除以[4,2,3]、[4,1.1]、[1,2,1]和每个最终输出的总和964

需要使用Java8流api吗

AtomicInteger counter = new AtomicInteger(0);

Integer[] array = {4, 2, 3, 4, 1, 1, 1, 2, 1};


Arrays.asList(array).stream().collect(Collectors.groupingBy(it -> counter .getAndIncrement() / 3)).forEach((k,v)->System.out.println(k + " " + v));
它打印

{0=[4, 2, 3], 1=[4, 1, 1], 2=[1, 2, 1]}
我需要打印每个部分的总和 964


谢谢

您可以在拥有
地图的位置停止问题
{0=[4,2,3],1=[4,1,1],2=[1,2,1]}

你需要

  • 迭代不同的
    列表
  • 将它们的元素求和
  • 打印它们(或收集它们以生成
    int

要获取该字符串的
字符串

String res = Arrays.asList(array).stream()
        .collect(Collectors.groupingBy(it -> counter .getAndIncrement() / 3))
        .values().stream()
        .map(val-> val.stream().mapToInt(Integer::intValue).sum())
        .map(String::valueOf)
        .collect(Collectors.joining());
        System.out.println(res);


较短但不可读的方法可以是:

  • 迭代
    ints
    ,在您的示例中用
    3
    分隔:0、3、6、9
  • 将每个值映射到从
    index
    index+3

不要使用外部计数器。由于流不能保证特定的处理顺序,因此不能保证计数器更新能够真实反映实际的元素位置

直截了当的解决方案没有那么复杂:

int[] array = {4, 2, 3, 4, 1, 1, 1, 2, 1};
int chunks = 3, chunkSize = array.length/chunks;
IntStream.range(0, chunks).forEach(i -> System.out.println(i+" "
    +Arrays.stream(array, i*=chunkSize, i+chunkSize).sum()));
如果数组长度不能被三整除,则这将忽略多余的元素

如果数组确实是
Integer[]
而不是
int[]
,则必须取消对元素的装箱:

Integer[] array = {4, 2, 3, 4, 1, 1, 1, 2, 1};
int chunks = 3, chunkSize = array.length/chunks;
IntStream.range(0, chunks).forEach(i -> System.out.println(i+" "
    +Arrays.stream(array, i*=chunkSize, i+chunkSize)
           .mapToInt(Integer::intValue)
           .sum()));
上述解决方案适用于“将整型列表分成3部分”,与您的问题标题相匹配。如果您想拆分为长度为3的部分,只需将解决方案更改为

int chunkSize = 3;
IntStream.range(0, array.length/chunkSize).forEach(i -> System.out.println(i+" "
    +Arrays.stream(array, i*=chunkSize, i+chunkSize)
           .mapToInt(Integer::intValue)
           .sum()));
如果要通过处理最后一个可能较短的块来处理不能被
chunkSize
整除的数组长度,可以使用

Integer[] array = {4, 2, 3, 4, 1, 1, 1, 2, 1, 100};
int chunkSize = 3;
IntStream.range(0, (array.length+chunkSize-1)/chunkSize)
    .forEach(i -> System.out.println(i+" "
        +Arrays.stream(array, i*=chunkSize, Math.min(i+chunkSize, array.length))
               .mapToInt(Integer::intValue)
               .sum()));

这只是一个需求列表。这不是问题。对不起,我们不是免费的代码编写服务。如果大小是素数呢?比如7,你怎么划分它?在1的子列表中?抱歉,michael,我知道如何从java 7中执行此操作,但我需要从java 8 Integer[]数组={4,2,1,4,0,1,0,2,0};Arrays.asList(array.stream().collect(Collectors.groupingBy(it->counter2.getAndIncrement()/3)).forEach((k,v)->System.out.println(k+“”+v));共享您的Java7代码,因为通常会有多种可能实现“相等部分”。对于长度为20:2x10、4x5、5x4、10x2的数组,您的代码将数组拆分为长度为3的部分,而不是长度为3的部分。当源数组正好有九个元素时,它恰好是相同的want@user3322836不客气,唐“不要犹豫投票赞成或接受。但是有一个问题,你硬编码的
3
数组是10长还是20长?azro我还有另一个问题,不需要打印这个,我需要返回字符串,因为字符串意味着字符串returnFunct(int[]arry]){................/..return 952}azro其他问题我有int数组{1,2,3,4,5}需要将它划分为列表长度3,如{1,2,3}{2,3,4},{3,4}和每个
数组的总和。带有3个参数的stream
让我今天学到了一些新东西,谢谢!
int chunkSize = 3;
IntStream.range(0, array.length/chunkSize).forEach(i -> System.out.println(i+" "
    +Arrays.stream(array, i*=chunkSize, i+chunkSize)
           .mapToInt(Integer::intValue)
           .sum()));
Integer[] array = {4, 2, 3, 4, 1, 1, 1, 2, 1, 100};
int chunkSize = 3;
IntStream.range(0, (array.length+chunkSize-1)/chunkSize)
    .forEach(i -> System.out.println(i+" "
        +Arrays.stream(array, i*=chunkSize, Math.min(i+chunkSize, array.length))
               .mapToInt(Integer::intValue)
               .sum()));