java流找到匹配还是最后一个?

标签 java list lambda java-8 java-stream

如何使用 java 流找到列表中的第一个匹配项或最后一个元素?

表示如果没有元素符合条件,则返回最后一个元素。

例如:

OptionalInt i = IntStream.rangeClosed(1,5)
                         .filter(x-> x == 7)
                         .findFirst();
System.out.print(i.getAsInt());

我应该怎么做才能让它返回 5;

最佳答案

给定列表

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

你可以这样做:

int value = list.stream().filter(x -> x == 2)
                         .findFirst()
                         .orElse(list.get(list.size() - 1));

这里如果过滤器的计算结果为真,则检索元素,否则返回最后一个元素。

如果列表是,你可以返回一个默认值,例如-1。

int value = list.stream().filter(x -> x == 2)
                         .findFirst()
                         .orElse(list.isEmpty() ? -1 : list.get(list.size() - 1));

关于java流找到匹配还是最后一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53647174/

相关文章:

java - 编程珠中的词频

java - 将 Stripe 与多个电子商务客户端结合使用

java - JSF 2.0 中不显示 PrimeFaces 饼图

javascript - 提交表单前的jquery

java - 为什么 List.contains(Object) 的行为不同?

lambda表达式错误: expression must be a modifiable lvalue

java - 如何保留 XML 标签但删除 HTML 标签

python - 如何对元组列表执行搜索

c++ - if constexpr 在递归通用 lambda : different compiler behavior

c++ - (c++) 在 boost multi_array 中存储 lambda 函数