我想要一个包含1到500范围内整数的列表。有没有办法使用Guava(或简单的Java)创建此列表,而无需遍历范围并单独添加值在我自己的代码中?
答案 0 :(得分:89)
新的Java 8方式:
List<Integer> range = IntStream.range(0, 500).boxed().collect(Collectors.toList());
答案 1 :(得分:14)
使用Guava,您可以使用Range
:http://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;
}