当前位置: 首页 > 知识库问答 >
问题:

当我从参数中接收到一个迭代时,如何使用java8中的lamba表达式从给定值中找到最接近的数字?[副本]

冯阳成
2023-03-14

就像您可以键入的列表:

public Iterable<Integer> findClosestNumbers(int givenValue, Iterable<Integer> numbers, int n){
    Iterable<Integer> closestNumbers;

    int closest = numbers.stream()
            .min(Comparator.comparingInt(i -> Math.abs(i - value)))
            .orElseThrow(() -> new NoSuchElementException("No value present"));


   return closestNumbers;

Like value:6且n=2则结果应返回可迭代的{4,5}

如何使用尽可能短的Iterable来写这个?我无法更改参数

共有1个答案

邵弘伟
2023-03-14

如果需要n最近值的集合,则需要对结果进行排序和切片:

public Iterable<Integer> findClosestNumbers(int givenValue, 
          Iterable<Integer> numbers, int n) {

    return StreamSupport.stream(numbers.spliterator(), false)
            .sorted(Comparator.comparingInt(i -> Math.abs(i - givenValue)))
            .limit(n)
            .collect(Collectors.toList());
}

这将按照与GivenValue的距离的升序返回N(或更少)数字。

 类似资料:
  • 问题内容: 给定一个整数列表,我想找到哪个数字与我在输入中提供的数字最接近: 有什么快速的方法可以做到这一点吗? 问题答案: 如果不确定列表是否已排序,则可以使用内置函数,查找与指定数字之间的最小距离的元素。 请注意,它也可用于带有int键的字典,例如。此方法花费O(n)时间。 如果列表已经排序,或者您可以只对数组进行一次排序,请使用@Lauritz答案中所示的二等分方法,该方法只需要O(logn

  • 给定一个整数列表,我想找出哪个数字最接近我在输入中给出的一个数字: 有什么快速的方法可以做到这一点吗?

  • 我想计算最接近数组平均数的数字,我已经计算完平均数,但我不知道如何找到最接近平均数的数字。 }

  • 问题内容: 我想知道是否有可能找到一个最接近的元素的元素 ,是不是 在那里。 例如,如果我们具有[1,3,6,7]值,并且正在寻找最接近4的元素,则它应返回3,因为3是数组中的最大数字,小于4。 我希望这是有道理的,因为英语不是我的母语。 问题答案: 如果数组已排序,则可以在以下位置进行修改的二进制搜索:

  • 我正在尝试自动查找一个数字与另一个数字的最接近因子; 示例: 700到30的最接近因子是28(30不等于700,但28等于700)。 一个显而易见的解决方案就是得到700的所有因子,并做一个简单的距离计算,找到离30最近的因子,但这似乎是低效的。 另一种解决方案是找到所有基本质因数,例如: 将这些数字相乘得到所有的组合,从而找到最接近的。 我正在尝试对其进行编程,使其自动化。有更好的解决方案吗?

  • 问题内容: 说我有一个清单。我想找到3个最接近的数字,例如6.5。然后返回的值将是。 在python中找到一个最接近的数字并不是那么棘手,可以使用 但是我试图不绕这个循环找到k个最接近的数字。有pythonic方法可以完成上述任务吗? 问题答案: 简短的答案 该 heapq.nsmallest() 函数将整齐,有效地做到这一点: 本质上是这样说的:“给我三个与 6.5 绝对差值最小的输入值”。 算