我有一套
Set<Long> entityIds;
我想把它分成10件装。最终得到一组集合,每组10个元素,如下所示:
List<Set<Long>> batches
我该怎么办?
我的解决方案:
private List<Set<T>> splitSet(Set<T> input) {
List<Set<T>> batches = new ArrayList<>();
for (int p = 0; p <= input.size(); p += 10) {
Set<T> partSet = input.stream().skip(p).limit(10).collect(Collectors.toSet());
batches.add(partSet);
}
return batches;
}
答案 0 :(得分:2)
您可以使用队列或堆栈,只需弹出/拉动元素
private static <T> List<Set<T>> extract(Set<T> set, int size){
List<Set<T>> result = new ArrayList<>();
Queue<T> queue = new LinkedList<>(set);
while (!queue.isEmpty() && size > 0){
Set<T> subSet = new HashSet<>();
while (subSet.size() < size && !queue.isEmpty()){
subSet.add(queue.poll());
}
result.add(subSet);
}
return result;
}
答案 1 :(得分:1)
我可能会这样做:
static <T> List<Set<T>> splitSet(Set<T> set, int n) {
List<Set<T>> split = new ArrayList<>();
int count = 0;
Set<T> newSet = new HashSet<>();
for (T id : set) {
if (++count % n == 0) {
split.add(newSet);
newSet = new HashSet<>();
}
newSet.add(id);
}
if (!newSet.isEmpty()) {
split.add(newSet);
}
return split;
}
public void test(String[] args) throws Exception {
Set<Long> ids = new HashSet<>();
for (long i = 0; i < 98; i++) {
ids.add(i);
}
System.out.println(splitSet(ids, 10));
}