find largest item in list that exceeds a constant value

Dónal :

Given a list of prices, I want to find the index of the the largest price that exceeds a certain minimum. My current solution looks like this:

public class Price {
    public static Integer maxPriceIndex(List<Integer> prices, Integer minPrice) {

        OptionalInt maxPriceIndexResult = IntStream.range(0, prices.size())
                .reduce((a, b) -> prices.get(a) > prices.get(b) ? a : b);

        if (maxPriceIndexResult.isPresent()) {
            int maxPriceIndex = maxPriceIndexResult.getAsInt();
            int maxFuturePrice = prices.get(maxPriceIndex);

            if (maxFuturePrice > minPrice) {
                return maxPriceIndex;
            }
        }

        return null;
    }

    public static void main(String[] args) {
        List<Integer> prices = Arrays.asList(5, 3, 2);
        Integer result = maxPriceIndex(prices, 6);
        System.out.println("Final result: " + result);
    }
}

I don't like this mix of imperative and functional code, but can't figure out a way of changing the reducer so that it also compares the price with minPrice. Is there a purely functional solution to this problem?

MikeFHay :

You can do the filter before finding the max.

IntStream.range(0, prices.size())
            .filter(i -> prices.get(i) > minPrice)
            .reduce((a, b) -> prices.get(a) > prices.get(b) ? a : b);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=327339&siteId=1