当我从参数接收到 Iterable 时,如何使用带有 java8 的 lambda 表达式从给定值中找到最接近的数字?

How to find closest number from a given value using lamba expression with java8 when i receive an Iterable from the parameter?

与列表一样,您可以键入:

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;

'givenValue'代表它应该最接近的值

'numbers' 可以是数字数组 {1, 2, 4, 5}

'n' 指定应 return 最接近值

的数字数量

像 value:6 和 n=2 那么结果应该 return Iterable {4, 5}

如何使用 Iterable 编写尽可能短的代码?我无法更改参数

如果您需要 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());
}

这将 return n(或更少)数字按照与 givenValue 的距离升序排列。