我有一个Java Set(特别是HashSet).假设它的大小为10k.如何将其分为5套,每套尺寸为2k?
use*_*870 18
Guava有用于分区Iterable类的库.该Iterables是具有静态方法来划分可迭代类的实用程序类.返回值虽然是Iterable列表.给定的代码显示了如何执行此操作.
Set<Integer> myIntSet = new HashSet<Integer>();
// fill the set
Iterable<List<Integer>> lists = Iterables.partition(myIntSet, SIZE_EACH_PARTITION);
Run Code Online (Sandbox Code Playgroud)
此方法将拆分集合的元素,以便第一个集合包含第一个2000,第二个集合包含下一个2000,等等.
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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14105 次 |
| 最近记录: |