我的问题也许微不足道,但是我无法破解。假设我们有一个数字列表: [-1,-2、1、2、8、9、13],我需要找到一个与给定数字(正向或负向)的差异最小的函数,比方说5。是否有一种简单的方法可以做到这一点?
答案 0 :(得分:2)
numbers.stream()
.mapToInt(i -> i-targetNumber)
.map(Math::abs)
.min()
.get() + targetNumber;
像这样吗?
家庭作业:也得到负数:)
编辑:我不能离开它……怎么办
numbers.stream()
.min((i1,i2) -> Math.abs(i1-target)-Math.abs(i2-target))
.get();
答案 1 :(得分:0)
您可以将您的电话号码与列表中的所有电话号码进行比较。然后,如果部分差异小于该差异,则可以将数字存储为结果。
public class Home {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(-1,-2,1,2,8,9,13);
Scanner s = new Scanner(System.in);
int number = s.nextInt();
int result = 0;
int differencePartial;
int difference = 1000;
for (Integer i : list) {
if (number > i)
differencePartial = number - i;
else
differencePartial = i - number;
if (differencePartial < difference) {
difference = differencePartial;
result = i;
}
}
System.out.println(result);
}
}