在List中找出一个和当前值最相近的值,差值最小

/**
     * 获取最小差值
     */
    public static BigDecimal getMinMinDiffValue(String source,List<String> list){
        //差值
        List<BigDecimal> subtractList = new ArrayList<>();
        BigDecimal value = new BigDecimal(source);
        for (String s : list) {
            BigDecimal bigDecimal = new BigDecimal(s);
            BigDecimal subtract = value.subtract(bigDecimal).abs();
            if(subtract.compareTo(BigDecimal.ZERO) == 0){
                return value;
            }
            subtractList.add(subtract);
        }
        BigDecimal min = subtractList.stream()
                .min(Comparator.naturalOrder())
                .orElse(BigDecimal.ZERO);
        for (String s : list) {
            BigDecimal bigDecimal = new BigDecimal(s);
            if (value.subtract(bigDecimal).abs().compareTo(min) == 0) {
                value = bigDecimal;
                break;
            }
        }
        return value;
    }

在List中找出一个和当前值最相近的值

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以使用迭代的方式查一个list的最小和最大,具体步骤如下: 1. 定义两个变量min_value和max_value,分别用来存储最小和最大,初始分别为list的第一个元素。 2. 使用for循环遍历list的每一个元素,如果当前元素比min_value小,则更新min_value的;如果当前元素比max_value大,则更新max_value的。 3. 循环结束后,将min_value和max_value打包成一个tuple并返回。 代码示例: def find_min_max(lst): min_value = lst[0] max_value = lst[0] for item in lst: if item < min_value: min_value = item if item > max_value: max_value = item return (min_value, max_value) # 测试 lst = [3, 5, 1, 9, 2, 7] result = find_min_max(lst) print(result) # 输 (1, 9) ### 回答2: 迭代查一个list最小和最大的方法如下: 1. 创建两个变量,一个用于保存最小,一个用于保存最大。初始可以设为列表的第一个元素。 2. 使用for循环遍历整个列表。 3. 在循环,比较当前元素与之前保存的最小和最大的大小,更新最小和最大的变量。 4. 循环结束后,将最小和最大分别放入一个元组。 5. 返回该元组。 以下是具体实现代码: def find_min_max(lst): min_val = max_val = lst[0] for num in lst: if num < min_val: min_val = num if num > max_val: max_val = num return (min_val, max_val) 示例调用该函数: list1 = [5, 3, 10, 8, 2] result = find_min_max(list1) print(result) 运行结果为:(2, 10) 说明:上述代码假设输入的列表至少有一个元素。对于空列表,这段代码将会抛异常。如果需要对空列表进行处理,可以在函数进行判断并返回一个合适的。 ### 回答3: 要使用迭代查一个list最小和最大,并返回一个tuple,可以按照以下步骤进行: 1. 声明两个变量,一个用于存储最小,初始化为列表的第一个元素,另一个用于存储最大,初始化为列表的第一个元素。 2. 使用for循环迭代遍历列表的每个元素。 3. 在循环,首先比较当前遍历到的元素是否小于最小变量的,如果是,则更新最小变量的当前元素。 4. 然后比较当前遍历到的元素是否大于最大变量的,如果是,则更新最大变量的当前元素。 5. 循环结束后,返回一个包含最小和最大的tuple。 以下是具体的代码实现: ``` def find_min_max(lst): min_value = lst[0] # 初始化最小为列表的第一个元素 max_value = lst[0] # 初始化最大为列表的第一个元素 for i in range(1, len(lst)): if lst[i] < min_value: min_value = lst[i] # 更新最小 if lst[i] > max_value: max_value = lst[i] # 更新最大 return (min_value, max_value) # 返回包含最小和最大的tuple # 测试代码 list1 = [5, 3, 9, 2, 7] # 示例列表 result = find_min_max(list1) print(result) # 输 (2, 9) ``` 以上代码,首先声明两个变量`min_value`和`max_value`,分别初始化为列表的第一个元素。然后使用for循环遍历列表的每个元素,并分别与最小和最大进行比较,更新对应的变量的。循环结束后,将最小和最大打包成一个tuple并返回。最后通过调用`find_min_max`函数并传入一个示例列表进行测试,测试结果输了最小和最大的tuple。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值