gpt4 book ai didi

java - 如何根据列表中元素的字节大小动态创建列表列表

转载 作者:太空宇宙 更新时间:2023-11-04 09:46:40 25 4
gpt4 key购买 nike

我们如何根据列表中元素的字节大小创建列表列表?

鉴于我有列表值。我想根据元素的字节大小之和将此列表拆分为多个列表。

List<List<String>> splitList(List<String> listToSplit, int maxByteSize)

假设我有一个 LiSTListToSplit = Arrays.asList("Value1", "Value2", "Value3"));

并且 maxByteSize = 12。

然后我希望得到 2 个列表 - 一个列表包含 Value1 和 Value2,另一个列表包含 Value3

这是我迄今为止尝试过的

  private List<List<String>> splitList( List<String> values, int maxByteSize) {
List<List<String>> returnList = new ArrayList<>();
returnList = buildValuesList(maxByteSize, values.size(), values, returnList);
return returnList;
}

private List<List<String>> buildList(int availableSize, int noOfValues, List<String> values,
List<List<String>> returnList) {
List<String> valuesList = new ArrayList<>();
List<String> remainderValues = new ArrayList<>(values);
returnList.add(valuesList);
int currentSize = 0;
for (String val : values) {
int valueSize = val.getBytes().length;
if (currentSize < availableSize && (currentSize + valueSize < availableSize)) {
currentSize += valueSize;
valuesList.add(val);
remainderValues.remove(val);
} else {
buildValuesList(availableSize, noOfValues, remainderValues, returnList);
}
}
return returnList;
}

最佳答案

迭代listToSplit,如果当前元素的字节长度与先前元素的字节长度之和大于maxByteSize,则将当前列表添加到要返回的列表中,并重置添加到要返回的列表中的字符串的长度计数器

public List<List<String>> splitList(List<String> listToSplit, int maxByteSize) {
List<List<String>> splittedList = new ArrayList<>();
List<String> currentList = new ArrayList<>();
int currentSize = 0;
for (String in : listToSplit) {

if (currentSize + in.getBytes().length > maxByteSize) {
splittedList.add(currentList);
currentList = new ArrayList<>();
splittedList.add(currentList); // add the new list to the list to return
currentSize = 0;
}
currentSize += in.getBytes().length;
currentList.add(in);
}
return splittedList;
}

关于java - 如何根据列表中元素的字节大小动态创建列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55342331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com