小编Oti*_*ton的帖子

将LongStream划分为具有最大长度的子流

我的程序中有一些SQL语句包含IN给定ID的-clauses.问题是在某些情况下可能会有超过1000个ID导致Oracle与ORA-01795崩溃.过多的物品.

所以我想把这个列表分成多个子列表.

示例:我有2403个ID

结果将是三个列表:

  1. 0 - 999
  2. 1000 - 1999年
  3. 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))));
Run Code Online (Sandbox Code Playgroud)

java java-stream

3
推荐指数
1
解决办法
87
查看次数

标签 统计

java ×1

java-stream ×1