【完善版】java,在集合中找最接近给定值的数,且比给定值小
2023-12-29 17:03:12
目录
一、前情提要
上面这篇文章中,我用【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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!