У меня есть простая императивная реализация алгоритма поиска дружных чисел.Сейчас я пытаюсь сделать его более функциональным.
public static void search(){
for(int i = 1; i < 10000; i++){
for(int j = i+1; j < 10000; j++){
if(isAmicable(i, j)){
System.out.println(i + " " + j);
}
}
}
}
public static boolean isAmicable(int i, int j){
return sumProperDivisors(i) == j && sumProperDivisors(j) == i;
}
public static int sumProperDivisors(int num){
int result = 0;
for(int i = 1; i < num; i++){
if(num%i == 0) result +=i;
}
return result;
}
Сначала я заменил циклы методом IntStreams в search ().
public static void streamed(){
IntStream.range(1, 10000).forEach(p -> {
IntStream.range(p+1, 10000).forEach(o -> {
if(isAmicable(p, o)) System.out.println(p + " " + o);
});
});
}
Я не вижу каких-либо состояний или побочных эффектов, которые должны быть уменьшены.Что еще нужно сделать в этой реализации, чтобы соответствовать парадигме FP?