我的程序中有一些SQL語句含有給定ID的IN
條款。問題是在某些情況下,可能會有超過1000個Ids導致Oracle與ORA-01795崩潰。過多的物品。將LongStream劃分爲最大長度的子流
所以我想把這個列表分成多個子列表。
例如:我有2403個IDS
結果將是三個列表:
- 0 - 999
- 1000 - 1999
- 2000至2402年
我已經寫一段可行的代碼,但看起來很糟糕。有沒有更好的解決方案來解決這個問題?也許收集器&分組或類似的東西?
我的代碼:
Map<Integer, List<Long>> result = new HashMap<>();
ArrayList<Long> asList = new ArrayList<Long>(listOfIds);
IntStream.range(0, (listOfIds.size()/1000) + 1)
.forEach(partGroup -> result.put(partGroup, asList.subList(partGroup * 1000, (partGroup * 1000) + Math.min(1000,
asList.size() - partGroup * 1000))));
你會闡述關於'.mapToObj'部分發生了什麼事情。再加上一個。 – Yahya
@Yahya它計算下一個批次的界限 - 從我看來不言自明,並且有一個額外的步驟來避免超出列表的大小。 – assylias