给定价格列表,我想找到超过某个最小价格的最大价格的索引。我当前的解决方案如下所示:

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


我不喜欢命令性代码和功能性代码的这种混合,但是无法找到改变减速器的方法,以便它也可以将价格与minPrice进行比较。是否有针对此问题的纯功能解决方案?

最佳答案

您可以在找到最大值之前进行过滤。

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

关于java - 在列表中查找超过恒定值的最大项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57290142/

10-11 22:26