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

2022-09-01 23:10:09

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

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

例如:

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

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


答案 1

给定列表

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

答案 2

您可以使用这样的函数:reduce()

OptionalInt i = IntStream.rangeClosed(1, 5)
        .reduce((first, second) -> first == 7 ? first : second);
System.out.print(i.getAsInt());