gpt4 book ai didi

java - 如何使用 Lambda 在 java1.8 中的字符串集合中搜索特定项?

转载 作者:行者123 更新时间:2023-11-29 09:40:40 26 4
gpt4 key购买 nike

我有如下元素的集合

List<String> lstRollNumber = new ArrayList<String>();
lstRollNumber.add("1");
lstRollNumber.add("2");
lstRollNumber.add("3");
lstRollNumber.add("4");

现在我想在该集合中搜索特定的 RollNumber。说

String rollNumberToSearch = "3";

我可以通过遍历集合并检查每个项目来轻松做到这一点,如果有任何匹配项,我可以突破循环并从函数返回 true。

但我想使用 Lambda 表达式 来执行此操作。

在 C# 中,我们使用(以及其他选项),

var flag = lstRollNumber.Exists(x => x == rollNumberToSearch);

如何在 Java 1.8 中做同样的事情?

我试过

String rollNumberToSearch = "3";
Stream<String> filterRecs = lstRollNumbers.stream().filter(rn -> rn.equals(rollNumberToSearch));

但我知道这是错误的?请指导。

最佳答案

您的错误是您正在使用流中间 操作filter 而没有调用流终端 操作。阅读 official documentation 中的流操作类型.如果您仍想使用 filter(出于学习目的),您可以使用 findAny()anyMatch() 解决您的任务:

boolean flag = lstRollNumbers.stream().filter(rn -> rn.equals(rollNumberToSearch))
.findAny().isPresent();

或者

boolean flag = lstRollNumbers.stream().filter(rn -> rn.equals(rollNumberToSearch))
.anyMatch(rn -> true);

或者根本不使用filter(正如@marstran 所建议的):

boolean flag = lstRollNumbers.stream().anyMatch(rn -> rn.equals(rollNumberToSearch));

另请注意,此处可以使用方法引用:

boolean flag = lstRollNumbers.stream().anyMatch(rollNumberToSearch::equals);

但是,如果您不想将其用于学习,而是用于生产代码,那么使用旧的 Collection.contains 会更容易和更快。 :

boolean flag = lstRollNumber.contains("3");

contains 方法可以根据集合类型进行优化。例如,在 HashSet 中,它只是散列查找,这比 .stream().anyMatch(...) 解决方案快得多。即使对于 ArrayList 调用 contains 也会更快。

关于java - 如何使用 Lambda 在 java1.8 中的字符串集合中搜索特定项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32601824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com