public static <T> List<Set<T>> split(Set<T> original, int count) {
// Create a list of sets to return.
ArrayList<Set<T>> result = new ArrayList<Set<T>>(count);
// Create an iterator for the original set.
Iterator<T> it = original.iterator();
// Calculate the required number of elements for each set.
int each = original.size() / count;
// Create each new set.
for (int i = 0; i < count; i++) {
HashSet<T> s = new HashSet<T>(original.size() / count + 1);
result.add(s);
for (int j = 0; j < each && it.hasNext(); j++) {
s.add(it.next());
}
}
return result;
}
//As example, in your code...
Set<Integer> originalSet = new HashSet<Integer>();
// [fill the set...]
List<Set<Integer>> splitSets = split(originalSet, 5);
Set<Integer> first = splitSets.get(0); // etc.
Set<String> hashSet = new HashSet<>();
SortedSet<String> sortedHashSet= new TreeSet<>(hashSet);
Set<String> subSet_1 = sortedHashSet.subSet(INDEX_START,INDEX_END);
//INDEX_END will be excluded
6条答案
按热度按时间6qftjkof1#
Guava有库来划分可迭代类。Iterables是一个实用类,它有静态方法来划分可迭代类。但是返回值是列表的可迭代值。给出的代码显示了如何做到这一点。
dfddblmv2#
此方法将拆分集合的元素,以便第一个集合包含前2000个元素,第二个集合包含后2000个元素,依此类推。
4bbkushb3#
如果你不想自己写,可以看看guava . Lists类有一个方法partition(List,int)来把一个列表分割成多个指定大小的列表.
lp0sw83n4#
我已经写了一些东西,做分裂的集。
它使用中间数组和列表。
它使用Arrays.asList和Arrays.copyOfRange方法。
这绝对不是最优雅的解决方案,但它是最好的,我能想到的时刻,当不想循环集自己。
4dc9hkyq5#
迟回答,但你可以尝试,
1.通过将其转换为列表,使用Guava库来使用
Lists.partition(list, PARTITION_VALUE)
。依赖性:
用法:
1.通过使用
List.subList(INDEX_START,INDEX_END)
1.通过将其转换为TreeSet和SortedSet并使用
Set.subSet(INDEX_START,INDEX_END)
...这种方式将对集合进行排序1hdlvixo6#
迭代整个集合,并将前2000个元素添加到第一个新集合,将后2000个元素添加到第二个新集合,等等。