1

我需要创建一个列表列表,其中每个列表的长度为 5 或列表中值的总和 <= 10(以先发生者为准)。到目前为止,我有:

    int currentSize = 0;
    Boolean size = false;
    Boolean length = false;

    for (int s : keyListMax) {

      if(currentSize >= 10) {
        sizeReached = true;
      }

      if(currentList.size() >= 5) {
        lengthReached = true;
      }

      if(!sizeReached && !lengthReached) {
        currentSize += currentList.stream().mapToInt(Integer::intValue).sum();
        currentList.add(s);
      }
      else {
        result.add(0, currentList);
        currentList.clear();
        currentSize = 0;
      }
    }
    System.out.println("Result is: " + result);

但结果是空列表的列表(可能是因为我正在使用 clear() ?)。另外,如何使用 Java 8 实现这一点?

4

1 回答 1

2

一个更简单的解决方案是保持您添加的元素的运行总数:

int i = 0;
while (i < keyListMax.size()) {
  int start = i;
  int sum = 0;
  do {
    sum += keyListMax.get(i);
    ++i;
  } while (i < keyListMax.size()
      && i < start + 5
      && sum + keyListMax.get(i) <= 10);
  result.add(0, new ArrayList<>(keyListMax.subList(start, i)));
}
于 2019-09-16T21:18:19.050 回答