首页 > 解决方案 > java流找到匹配还是最后一个?

问题描述

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

这意味着如果没有元素匹配条件,则返回最后一个元素。

例如:

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

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

标签: javalistlambdajava-8java-stream

解决方案


鉴于列表

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));

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

如果列表为,您可以返回默认值,例如 -1。

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

推荐阅读