java - IntStream Java 出现次数

标签 java java-8 java-stream

我想定义一个名为 countRepeats 的方法,它接受一个数字列表 0 到 9 并返回相邻重复字母的出现次数。

例如,

测试用例1:数组{0, 1, 2, 2, 1, 2, 2, 1, 3, 3, 1}出现3次重复数字

测试用例2:数组{0, 1, 1, 1, 1, 2}出现一次

下面是我的代码:

List<Integer> intlist = new ArrayList<Integer>();
        int [] array = new int[]{};
        while(sc.hasNext()){
          intlist.add(sc.nextInt());
          array = intlist.stream().mapToInt(i->i).toArray();  
        }
        System.out.println("Number of occurrences: " + countRepeats(array));

public static long countRepeats(int [] array){
      return IntStream.range(0, array.length-1)
                    .filter(n -> array[n] > 0)
                    .filter(i -> (array[i] == array[i+1]))
                    .peek(System.out::println)
                    .count();
}

但是,我的测试用例 2 未能获得预期的结果。任何人都可以启发我吗?

最佳答案

在原始发布者的解决方案的基础上,如果我们检查重复对是否是更大序列的一部分(并检查数组的末尾),那么我们就可以避免装箱。

import java.util.*;
import java.util.stream.*;

interface CountRepeats {
    static void main(String[] args) {
        test(0, 1, 2, 2, 1, 2, 2, 1, 3, 3, 1);
        test(0, 1, 1, 1, 1, 2);
    }
    static void test(int... digits) {
        System.err.println(
            countRepeats(digits)+": "+Arrays.toString(digits)
        );
    }
    static long countRepeats(int[] array) { 
        return IntStream.range(0, array.length-1)
            .filter(i ->
                array[i] == array[i+1] && (
                   i+2 >= array.length ||
                   array[i] != array[i+2]
                )
             )
             .count();
    }
}

这并不是流的强项。

(线

                   i+2 >= array.length ||

应该是

                   i >= array.length-2 ||

避免整数溢出导致 ArrayOutOfBoundsException。古老的语言和它们 splinter 的整数……)

关于java - IntStream Java 出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52742944/

相关文章:

java - java中如何限制用户输入一定范围内的数字?

Java泛型根据值返回枚举

java - "String[]::new"是什么意思?

java - 如何在两个数组中查找字符串之间的匹配项 - java

JAVA更新ArrayList对象方法不更新

javafx - 如何设置警报框相对于当前primaryStage的位置? (JavaFX)

java-8 - 如何在 Java 8 中将当前日期更改为民国日期?

java - 如何使用 Java 8 流返回可选字符串

collections - 如何根据 Java 8 中列表元素内的比较来过滤列表?

java - Linux 服务器上的 Tomcat7 未连接到 MySQL 数据库