【问题标题】:Partition list to sub lists in Java8Java8中子列表的分区列表
【发布时间】:2020-11-25 13:48:48
【问题描述】:

我想知道是否有任何使用 Java 8 的好方法来做这样的事情:

int amount = 1000;
int firstIndex = 0;
int lastIndex = firstIndex + amount;
List<int> projectIdsList;

while (lastIndex < projectIdsList.size()){
        doSomethingWhitSubList(projectIdsList.subList(firstIndex, lastIndex));
        firstIndex = lastIndex;
        lastIndex = firstIndex + amount;
}
doSomethingWhitSubList(projectIdsList.subList(firstIndex,  projectIdsList.size());

【问题讨论】:

  • 什么是countOfBulk?您在此期间和之后要寻找什么子列表?您确定不使用两次相同的索引吗?
  • 我错误地编辑了countOfBulk并将其更改为amount。函数“doSomethingWhitSubList”获取列表作为参数并将它们插入数据库,以避免在同一查询中插入许多项目...谢谢。

标签: java list java-8


【解决方案1】:

您可以使用IntStream 将列表划分为子列表,我不太确定您分区后的意图,但您可以使用collect 将子列表收集到列表中

List<List<Integer>> subLists = IntStream.range(0,integers.size())
            .filter(i->i%amount == 0)
            .mapToObj(i->integers.subList(i,i+amount > integers.size() ? integers.size() : i+amount))
            .collect(Collectors.toList());

或者你也可以使用forEach进行分区后的任何操作

IntStream.range(0,integers.size())
            .filter(i->i%amount == 0)
            .mapToObj(i->integers.subList(i,i+amount > integers.size() ? integers.size() : i+amount))
            .forEach(this::doSomethingWhitSubList);

【讨论】:

  • 您的代码实际上在做什么?在这里对doSomethingWhitSubList... 的相关调用是什么?
  • 我想向 OP 展示如何使用 java-8 从列表中创建子列表,并且我同意在分区@Naman 后他需要的输出不是很清楚的问题
  • 很抱歉,如果我可以从我这里添加一些东西,而不是遍历整个整数流,根据需要多少段计算 segmentsCount = integers.size()/segmentSize +1,然后在创建 IntStream 时使用 segmentsCount。这将是更多的计算,但如果你使用Math.min 来计算你的子列表的结尾,它的执行时间也会更快,它会更具可读性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多