keysリストと配列の関係arrはあまり明確ではありません。
元のコードでは、ループはリストのサイズによる反復に基づいていますkeys(の内容keysは無視されます)。
0また、分母で除外する必要がある場合や、数値がそれ自体で除算される場合もあります。
for-loopswith インデックスは、次のように置き換えることができIntStream.range(0, keys.size())ます。
int[] divisors = IntStream.range(0, arr.length)
.map(i -> (int) IntStream.range(0, arr.length)
.filter(k -> arr[i] != arr[k] && arr[k] != 0 && arr[k] != 1 && arr[i] % arr[k] == 0)
.count()
)
.toArray();
代わりに、配列Arrays.streamに使用して、ループのようにインデックスを無視することができます。arrforeach
int[] divisors = Arrays.stream(arr)
.map(x -> (int) Arrays.stream(arr)
.filter(y -> x != y && y != 0 && y != 1 && x % y == 0)
.count()
)
.toArray();
int max = Arrays.stream(divisors).max().getAsInt();
System.out.println(Arrays.toString(divisors));
System.out.println(max);
テスト配列int[] arr = {6, 0, 1, 6, 2, 4, 8};の出力は次のとおりです。
[1, 5, 0, 1, 0, 1, 2]
5