Я застрял в одном из упражнений, которое я делаю, чтобы немного углубиться в функциональное программирование, поэтому моя главная проблема заключается в том, как посчитать переданные предикаты для элемента коллекции и, если он соответствует заданному порогу, чем собрать его витоговая коллекция.
Я знаю, как сделать это без порога, и вот мое решение:
List<String> filter(List<Predicate<String>> predicateList, List<String> stringList) {
return stringList.stream()
.filter(predicateList.stream()
.reduce(x -> !(x.isEmpty()), Predicate::and))
.collect(Collectors.toList());
}
Но что мне делать, когда есть параметр, который определяет, сколько процентов предикатовнеобходимо передать, чтобы собрать строку, скажем, тело метода может выглядеть следующим образом:
List<String> filtrr(List<Predicate<String>> predicateList, List<String> stringList, Double threshold) {}
РЕДАКТИРОВАТЬ: Например, метод должен пройти модульный тест следующим образом:
@Test
void filtrrTest() {
Double threshold = 0.65;
Predicate<String> predicate = p -> p.contains("lorem");
Predicate<String> predicate1 = p -> p.length() > 10;
Predicate<String> predicate2 = p -> p.contains("sed");
List<Predicate<String>> predicateList = Arrays.asList(predicate, predicate1, predicate2);
String string = "lorem ipsum dolor sit amet sed";
String string1 = "consectetur adipiscing elit, sed do eiusmod";
String string2 = "ipsum";
String string3 = "adipiscing elit";
String string4 = "sed do eiusmod";
List<String> stringList = Arrays.asList(string, string1, string2, string3, string4);
List<String> expectedList = Arrays.asList(string, string1, string4);
assertEquals(expectedList, ClassName.filtrr(predicateList, stringList, threshold));
}