yeg*_*256 5 java guava apache-commons-collection
是否有一个单行(可能来自Guava或Apache Collections)从一组中获取子列表.在内部它应该做这样的事情:
public <T> List<T> sublist(Set<T> set, int count) {
Iterator<T> iterator = set.iterator();
List<T> sublist = new LinkedList<T>();
int pos = 0;
while (iterator.hasNext() && pos++ < count) {
sublist.add(iterator.next());
}
return sublist;
}
Run Code Online (Sandbox Code Playgroud)
显然,如果没有足够的元素,它必须尽可能多地返回.
Lou*_*man 18
与番石榴:
return FluentIterable.from(set)
.limit(count)
.toImmutableList();
Run Code Online (Sandbox Code Playgroud)
(此外,与大多数其他解决方案相比,这实际上不会迭代整个集合 - 它实际上只会迭代第一个count元素然后停止.)
Dir*_*irk 13
(new LinkedList<Object>(mySet)).sublist(0, Math.min(count, mySet.size()))
Run Code Online (Sandbox Code Playgroud)
但是请注意:代码(甚至是原始代码)有点臭,因为集合的迭代顺序取决于所讨论的实际集合实现(它完全未定义HashSet并且TreeSets 的键顺序).因此,它实际上是一个悬而未决的问题,哪些元素成为最终的子列表.
这应该这样做:
return (new LinkedList<T>(set)).subList(0, count);
Run Code Online (Sandbox Code Playgroud)
但要确保,这count不大于set.
返回此set的部分视图,其元素范围从fromElement到toElement.如果fromElement和toElement相等,则返回的集合为空,除非fromExclusive和toExclusive都为真.返回的集由此集支持,因此返回集中的更改将反映在此集中,反之亦然.返回的集支持此集支持的所有可选集操作.
使用INTEGER的示例:
TreeSet<Integer> t = new TreeSet<Integer>();
t.add(1);
t.add(2);
t.add(3);
t.add(4);
t.add(5);
System.out.println("Before SubSet:");
for(Integer s : t){
System.out.println(s);
}
System.out.println("\nAfter SubSet:");
for(Integer s : t.subSet(2,false,5,true)){
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
Before SubSet:
1
2
3
4
5
After SubSet:
3
4
5
Run Code Online (Sandbox Code Playgroud)
或者,如果您不知道元素并希望在两点之间返回元素,则可以使用由Set构造的ArrayList并使用subList方法.
System.out.println("\nAfter SubSet:");
t = new TreeSet(new ArrayList(t).subList(2, 5));
for(Integer s : t){
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10010 次 |
| 最近记录: |