当我从参数接收到 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
的距离升序排列。
与列表一样,您可以键入:
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
的距离升序排列。