使用连续的整数范围填充List

时间:2013-05-23 10:10:17

标签: java guava

我想要一个包含1到500范围内整数的列表。有没有办法使用Guava(或简单的Java)创建此列表,而无需遍历范围并单独添加值在我自己的代码中?

4 个答案:

答案 0 :(得分:89)

新的Java 8方式:

List<Integer> range = IntStream.range(0, 500).boxed().collect(Collectors.toList());

答案 1 :(得分:14)

使用Guava,您可以使用Rangehttp://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Range.html

当然,代码中仍然会有循环,但为了简单起见,它们可能会隐藏在代码中。

例如:

Range<Integer> yourValues = Range.closed(1, 500);

查看http://code.google.com/p/guava-libraries/wiki/RangesExplained以获取更多示例。

请注意,如果 需要最终迭代Range,则不能直接执行此操作,只能使用DiscreteDomains.integers()

答案 2 :(得分:1)

顺便说一下。如果只是在某种迭代中使用,你可以简单地创建一个实现Iterable接口的基本类,以完全跳过插入。

这样的事情:

import java.util.Iterator;

public class IntegerRange implements Iterable<Integer> {
    private int start, end;

    public IntegerRange(int start, int end) {
        if (start <= end) {
            this.start = start;
            this.end = end;
        } else {
            this.start = end;
            this.end = start;
        }
    }

    @Override
    public Iterator<Integer> iterator() {
        return new IntegerRangeIterator();
    }

    private class IntegerRangeIterator implements Iterator<Integer> {
        private int current = start;

        @Override
        public boolean hasNext() {
            return current <= end;
        }

        @Override
        public Integer next() {
            return current++;
        }
    }
}

可以用这种方式使用:

Iterable<Integer> range = new IntegerRange(1, 500);

for (int i : range) {
    // ... do something with the integer
}

答案 3 :(得分:0)

您还可以使用Apache Commons IntRange实用程序

例如

    private List<Integer> getAllIntegerRange(Integer firstValue, Integer secondValue) {
    List<Integer> values = new ArrayList<>();
    IntRange rang = new IntRange(firstValue, secondValue);
    int[] ranges = rang.toArray();
    for (int i : ranges) {
        values.add(i);
    }
    return values;
}