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

问题描述 投票:36回答:4

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

java guava
4个回答
14
投票

使用番石榴,您可以使用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()


93
投票

新的Java 8方式:

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

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
}

0
投票

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

EG

    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;
}
© www.soinside.com 2019 - 2024. All rights reserved.