Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В подспорье автору — больее подходящая реализация третьей задачи на C#
int count = 98;
var result = Range(2, count)
.Where(p =>
!(Range(2, count).Count(n=>p%n == 0) > 1)
);Уверен вы решили еще мгновенно
По поводу третьей задачи, не совсем понятно зачем там лишние проверки и конверторы, все решается как показано ниже:
Observable.range(2, 100)
.filter({isPrime(it)})
.reduce({s1, s2 -> s1+" "+s2})
.subscribe({System.out.println it })range(int start, int count)
, то есть будут взяты элементы не с 2 по 100, а с 2 по 101.Func2<T, T, T>
, то есть два входных и выходной объекты должны быть одного типа, то есть подавать на вход int-ы не получится, приходится преобразовать их в String, если мы хотим получить String на выходеПо поводу четвертой задачи, все решается через один оператор reduce, на груви выглядит так:
def whatDivider = { int n ->
if (n % 3 == 0) return 3
if (n % 7 == 0) return 7
return 0;
}
Observable.range(1, 20)
.reduce([:], {Map acc, int x ->
final n = whatDivider(x)
if (n == 0) return acc
acc[n] = (acc[n] ?: []) + x
acc
})
.subscribe({
it.each{ k, v -> println("Can be divided without remainder by ${k}: ${v}")}
});На джаве должно быть не на много длиннее.
Насколько гибкими являются наши знания в области операторов Rx?