我有 2 个 String
A = {"apple", "mango", "pineapple", "banana", ... }
B = {"app", "framework",...}
我正在寻找的是:B 的任何元素是否至少与 A 的任何元素部分匹配(substring/contains/startsWith
)。例如,B 'app 的第一个元素' 与至少一个元素 'apple' 部分匹配。
StackOverflow 上其他紧密匹配的主题不考虑 2 个列表。
是否有任何优雅的方式来使用 Java lambda 表达解决方案?
我觉得这是搜索领域的普遍问题。因此,如果对这个主题有任何帮助或有趣的读物,我很乐意接受指点。
最佳答案
取决于你所说的优雅是什么意思,但试试这个:
List<String> r = list1
.parallelStream()
.filter( w1->{
return list2
.parallelStream()
.anyMatch( w2->w1.contains(w2) );
}
)
.collect(Collectors.toList());
anyMatch
(和 filter
)可以被短路,并且在找到 w1.contains(w2) 的第一个匹配项后将中止第二个列表的流
如果找到则返回 true,提高效率。使用它来过滤第一个流。在并行流中进行。
关于Java Lambda - 查找列表的任何 String 元素是否与另一个列表的任何元素部分匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45392285/