如何以方便的方式检查列表中是否有多个元素?

Joh*_*yun 5 java lambda java-8

我正在尝试写下列条件:

if(javaList.contains("aaa")||javaList.contains("abc")||javaList.contains("abc")) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能以更好的方式做到这一点?

Era*_*ran 7

contains在a Set上运行比在a上运行通常更有效List.因此,我建议您创建一个Set要测试的元素,然后流式传输List以查看其中的任何元素是否匹配:

怎么样:

if (javaList.stream().anyMatch(e -> Set.of("aaa","abc","def").contains(e)))
Run Code Online (Sandbox Code Playgroud)

  • @JohnHumanyun`Set.of`是从Java9 +使用你可以使用一个简单的Set,只需看看谷歌 (3认同)
  • 当以这种方式编写时(`.anyMatch(e - > Set.of("aaa","abc","def").contains(e))`),它将为每个列表元素重复创建`Set`(直到JVM设法优化这个).相反,只需指定`.anyMatch(Set.of("aaa","abc","def"):: contains)`就足以确保只为每个元素评估创建并重用一个`Set`. (3认同)

Nic*_*s K 3

如果您使用的是 java 8 及更高版本,则可以使用以下代码:

if (javaList.stream().anyMatch(l -> l.matches("aaa|xyz|abc")))
Run Code Online (Sandbox Code Playgroud)

您可以使用.matches()并传入由OR符号分隔的字符串String中的参数,表示为正则表达式.matches()