java stream find match or the last one?

Given the list

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

You could just do :

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

Here if the filter evaluates to true the element is retrieved, else the last element in the last is returned.

If the list is empty you could return a default value, for example -1.

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

You can use reduce() function like that:

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