我有两个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();
}
有没有办法流畅地编写相同的代码?