【完善版】java,在集合中找最接近给定值的数,且比给定值小

2023-12-29 17:03:12

目录

一、前情提要

二、核心代码

三、测试


一、前情提要

【AI】java,在集合中找最接近给定值的数,且比给定值小

上面这篇文章中,我用【C知道】帮我解决了问题。

当时没发现问题,结果今天在使用时出现了异常。

所以,有了今天这篇内容。

目的:让逻辑更完善,方方面面都考虑到。

这次主要添加了超越边界时的处理逻辑。

二、核心代码

/**
 * 在 collection 中,找跟 value 最大接近值,且该值小于等于 value
 *
 * @param collection 不为null。
 * @param value 不为null。
 *
 * @return
 * 1、如果 value 小于等于 collection 中的最小值,那么直接返回 value 。
 * 2、如果 value 大于等于 collection 中的最大值,那么直接返回 collection 中的最大值 。
 * 3、反之,在 collection 中,找跟 value 最大接近值,且该值小于等于 value 的数。
 *
 */
public static Integer findMaxNearestValue(Collection<Integer> collection,
                                          Integer value) {

    // 先排序,最小的是第一个
    List<Integer> list = collection.stream().sorted().collect(Collectors.toList());

    if (Integer.compare(value, list.get(0)) <= 0) {
        return value;
    }

    ///

    Integer maxInCollection = list.get(list.size() - 1);

    if (Integer.compare(value, maxInCollection) >= 0) {
        return maxInCollection;
    }

    ///

    Integer maxNearestValue = list.get(0);

    for (Integer tmpValue : collection) {

        // 如果有相同值,直接返回,这是最符合要求的值
        if (tmpValue.equals(value)) {
            return value;
        }

        if (tmpValue <= value && maxNearestValue < tmpValue) {
            maxNearestValue = tmpValue;
        }

    }

    return maxNearestValue;
}

三、测试

public static void main(String[] args) {
    List<Integer> list = Arrays.asList(2, 3, 12);

    / 1、超越边界 /

    // 1
    System.out.println(findMaxNearestValue(list, 1));

    // 12
    System.out.println(findMaxNearestValue(list, 15));


    / 2、边界值 /

    // 2
    System.out.println(findMaxNearestValue(list, 2));

    // 3
    System.out.println(findMaxNearestValue(list, 3));

    // 12
    System.out.println(findMaxNearestValue(list, 12));


    / 3、在区间内 /

    // 3
    System.out.println(findMaxNearestValue(list, 5));

    // 3
    System.out.println(findMaxNearestValue(list, 9));
}

文章来源:https://blog.csdn.net/djj1015591892/article/details/135286739
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。