首页 > 解决方案 > 使用流检查除数检查数组

问题描述

我想知道是否可以执行下面的嵌套 for 循环,检查列表中的每个元素以及它的除数不等于 1 从同一列表中作为流的计数。如果是这样,是否会推荐它而不是传统的 for 循环?

示例输入 - “列表键”转换为“数组 - arr”。

int max = Integer.MIN_VALUE;
for(int i = 0; i < keys.size(); i++){
    int count = 0;
    for(int k = 0; k < keys.size(); k++){
        if(arr[i] % arr[k] == 0 && arr[k] != 1){
            count++;
        }
    }
    max = Math.max(max,count);
}

标签: javafor-loopjava-8java-stream

解决方案


您可以使用streams下面的方法来做到这一点,但是正如@Ralf Kleberhoff 提到的那样,streams优于传统的优势for-loop取决于各种因素,可读性很简洁,但对于调试或日志记录,我认为传统for-loop的更好

int max = keys.stream()
          .map(i -> IntStream.range(0, keys.size()).filter(k -> arr[i] % arr[k] == 0 && arr[k] != 1).count())
          .max((o1, o2) -> Math.toIntExact(o1 - o2))
          .map(Math::toIntExact).orElse(Integer.MIN_VALUE);

推荐阅读