У меня есть две Sets
строк, мне нужно найти, является ли строка подстрокой какой-либо строки из другого набора. Ниже приведен эквивалентный код в императивном стиле.
boolean elementContains() {
Set<String> set1 = Set.of("abc","xyz","mnop");
Set<String> set2 = Set.of("hello.world.mnop", "hello.world", "foo.bar");
for (String str: set1) {
for (String str2: set2) {
if(str2.contains(str)) { //XXX: contains not equals
return true;
}
}
}
return false;
}
Я придумал декларативный код, который не очень красноречив.
boolean elementContains() {
Set<String> set1 = Set.of("abc","xyz","mnop");
Set<String> set2 = Set.of("hello.world.mnop", "hello.world", "foo.bar");
Optional<String> first = set1.stream()
.filter(ele -> {
Optional<String> first1 = set2.stream()
.filter(ele2 -> ele2.contains(ele))
.findFirst();
return first1.isPresent();
}).findFirst();
return first.isPresent();
}
Есть ли способ написать тот же код свободно?