我想要一个包含 1 到 500 范围内的整数的列表。有没有办法使用 Guava(或纯 Java)创建这个列表,而不必遍历范围并在我自己的范围内单独添加值代码?
user1596371
问问题
42571 次
4 回答
127
新的 Java 8 方式:
List<Integer> range = IntStream.range(1, 501).boxed().collect(Collectors.toList());
于 2014-05-15T10:05:57.580 回答
14
使用 Guava,您可以使用Range
:https ://guava.dev/releases/19.0/api/docs/com/google/common/collect/Range.html
当然,您的代码中仍然会有循环,但为了简单起见,它们可能会从代码中隐藏起来。
例如:
Range<Integer> yourValues = Range.closed(1, 500);
查看https://github.com/google/guava/wiki/RangesExplained以获取更多示例。
请记住,如果您确实需要最终迭代Range
,您不能直接这样做,只能通过使用DiscreteDomains.integers()
.
于 2013-05-23T10:14:04.690 回答
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
}
于 2018-03-11T15:11:43.140 回答
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;
}
于 2019-02-20T14:15:08.710 回答