有没有一种简单的方法来生成列表
也就是说,比以下内容短,但相当于1:
void List<Integer> makeSequence(int begin, int end) {
List<Integer> ret = new ArrayList<>(end - begin + 1);
for (int i=begin; i<=end; i++) {
ret.add(i);
}
return ret;
}
番石榴的使用是可以的。
更新:
由于这个问题已经得到了几个很好的答案,都是使用本机Java 8和第三方库,我想我应该测试所有解决方案的性能。
第一个测试使用以下方法简单地测试创建10个元素的列表
[1...10]
:
经典ArrayList:上面在我的问题中给出的代码(基本上与adarshr的答案相同)。
- eclipseColl的代码:在唐纳德的答案下面给出的代码使用Eclipse集合8.0。
- guavaRange:下面daveb回答中给出的代码。从技术上讲,这不会创建
List
以下是每秒千次运算的结果(数字越大越好),对于以上所有大小为10的列表:
... 对于大小为10000的列表:
最后一张图表是正确的——除了Eclipse和Guava之外的解决方案太慢了,甚至连一个像素条都拿不到!快速解决方案比其他解决方案快1万到2万倍。
当然,这里发生的事情是,guava和eclipse解决方案实际上并没有实现任何类型的10000元素列表——它们只是围绕起点和终点的固定大小包装。每个元素都是在迭代过程中根据需要创建的。因为我们实际上没有在这个测试中迭代,所以成本被推迟。所有其他的解决方案实际上都在内存中实现了完整的列表,并且在一个仅创建的基准测试中付出了沉重的代价。
让我们做一些更现实的事情,并迭代所有的整数,求和。因此,在
IntStream.range封闭
变体的情况下,基准看起来像:
@Benchmark
public int intStreamRange() {
List<Integer> ret = IntStream.rangeClosed(begin, end).boxed().collect(Collectors.toList());
int total = 0;
for (int i : ret) {
total += i;
}
return total;
}
在这里,图片变化很大,尽管非物化解决方案仍然是最快的。这里的长度=10:
... 长度=10000:
在许多元素上的长时间迭代使事情平衡了很多,但是eclipse和番石榴即使在10,000个元素测试中也保持了两倍多的速度。
所以如果你真的想要一个
列表
1错误处理除外,例如,如果
end
以下一行Java 8版本将生成[1,2,3…10]。iterate
的第一个arg是序列中的第一个nr,limit
的第一个arg是最后一个数字。
List<Integer> numbers = Stream.iterate(1, n -> n + 1)
.limit(10)
.collect(Collectors.toList());
嗯,这一条可能符合条件(使用番石榴系列)
ContiguousSet<Integer> integerList = ContiguousSet.create(Range.closedOpen(0, 10), DiscreteDomain.integers());
System.out.println(integerList);
这不会创建List
在较旧的版本中(Guava 14之前的某个地方),你可以使用:
ImmutableList<Integer> integerList = Ranges.closedOpen(0, 10).asSet(DiscreteDomains.integers()).asList();
System.out.println(integerList);
两者都产生:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Java 8非常简单,甚至不再需要单独的方法:
List<Integer> range = IntStream.rangeClosed(start, end)
.boxed().collect(Collectors.toList());
问题内容: 我需要使用表/结果集/任何包含整数(包括整数)的联接。是否有一种简单的方法来实现这一目标而不仅仅是构建表? (顺便说一句,这种类型的结构称为“ 元查询 ”吗?) 被限制在合理的范围内(<1000) 问题答案: MySQL中没有序列号生成器(CREATE SEQUENCE )。最近的是,它可以帮助您构造表。
有一个unique的数组列表,我需要将它们在z大小的数组列表之间随机分布。请记住: 是可变值 一个示例是,当您有一个由8个元素组成的数组的原点,并且希望输出3个大小为6的数组时: 原始数组列表:[1, 2, 3, 4, 5, 6, 7, 8] 结果输出:[7,5,3,6,4,8],[7,5,1,8,2,3],[8,1,2,3,4,6] 我开发了一个算法,并在注释中进行了解释。首先,我创建了一个包含
我正在尝试实现一个函数int choose_N(void),它生成并返回一个随机的整数列表N(最多四个整数)。我不确定我是否以正确的方式使用了rand(),但这是我目前所拥有的: 这样循环会有用吗?时间是否以正确的方式初始化?
假设您在python中输入了一个数字,并且希望生成一个连续数字列表,最多为,如 你怎么能这么做?
问题内容: 我正在尝试在MySQL中生成序列表,以便可以从获得唯一ID 。 问题是我需要动态地多个序列。 首先,我创建了一个表: 然后尝试使用http://dev.mysql.com/doc/refman/5.0/en/information- functions.html#function_last-insert- id中的 示例获取编号 一段时间后,我意识到我还需要安全地为新标签生成行。因此,
我使用以下命令创建了一个名为hibernate_sequence的序列 这是我的hibernate注释dao 为了向表中插入新记录,hibernate正在生成错误的查询以获取下一个序列值。。Hibernate总是发出此查询。。不管我做什么。。 我使用的是oracle 10G,它总是报告以下错误。。 发出的查询应该是