为Java中的初始声明声明int的上限?

时间:2018-08-09 18:09:16

标签: java list for-loop comparison

我正在尝试使用for循环来比较intArrayList之间的差异。因此,我需要有一个任意大的初始变量,任何差异都必须小于该初始变量。这是最小的可行示例:

List<Integer> l = new ArrayList<>();
l.add(5);
l.add(1);
// ...etc

Collections.sort(l);
int diff = 0;
int minDiff = 100;

for (int i = 1; i < l.size(); i++) {
    diff = l.get(i) - l.get(i-1);
    if (diff < minDiff) minDiff = diff;
}

我的问题是在diff大于minDiff的情况下。是否有一种解决方案,可以分配> 100使其小于其他minDiff?谢谢!

3 个答案:

答案 0 :(得分:3)

我将其设置为可能的最大整数值:

int minDiff = Integer.MAX_VALUE;

与之相比,一切都会变小。

答案 1 :(得分:0)

实际上,如果您将diff的初始值分配为List<Integer> l的两个初始值之差,则无需考虑。并将初始迭代索引i增加到2

int minDiff = 100;

int diff = l.get(1) - l.get(0);
for (int i = 2; i < l.size(); i++) {

    diff = l.get(i) - l.get(i-1);
    if (diff < minDiff) minDiff = diff;
}

此解决方案建议该列表至少包含3个元素。


或者,尝试使用Stream-API来完全替代for-loop和辅助变量diff

int minDiff = IntStream.range(0, l.size() - 1))                       // 0...n-1 iteration
                       .map(index -> l.get(index + 1) - l.get(index)) // output differences
                       .min().getAsInt();                             // finds the minimum

答案 2 :(得分:0)

使用流:

int minDiff = IntStream.range(1, l.size())
    .map(i -> l.get(i) - l.get(i-1))
    .mapToInt()
    .min().getAsInt();
相关问题