Java Lambda - 查找列表的任何 String 元素是否与另一个列表的任何元素部分匹配

标签 java lambda

我有 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/

相关文章:

java - 使用 jYearChooser 和 jMonthChooser

java - 从 Ant 运行 bash 脚本并向其传递多个参数

C++ 内联 lambda 参数

java - 用 lambda 表达式替换匿名函数

c# - lambda 表达式树的空检查

java - 我正在使用 epublib 并且我正在尝试一次获取一本书的整个章节

java - com.ibm.msg.client.wmq.WMQConstants 无法解决

java - 更改绘制的椭圆形的颜色

java - 如何确定使用lambda实现泛型FunctionalInterface的Bean的类型参数?

c++ - 为什么我的全局外部 lambda 变量没有在运行时初始化?