如何基于动态传递的索引高效地拆分Java列表
我有一个Java列表,我需要根据从属性文件传递的索引值拆分列表 例如:如何基于动态传递的索引高效地拆分Java列表,java,arraylist,Java,Arraylist,我有一个Java列表,我需要根据从属性文件传递的索引值拆分列表 例如: ArrayList<String> sampleList = new ArrayList<String>(); sampleList.add("1"); sampleList.add("2"); sampleList.add("3"); sampleList.add("4"); sampleList.add("5"); sampleList.add("6"); sampleList.add("7");
ArrayList<String> sampleList = new ArrayList<String>();
sampleList.add("1");
sampleList.add("2");
sampleList.add("3");
sampleList.add("4");
sampleList.add("5");
sampleList.add("6");
sampleList.add("7");
sampleList.add("8");
sampleList.add("9");
sampleList.add("10");
[1,2,3]4[5]6[7,8,9,10]
下一次如果传递的索引是3,5,8,那么输出应该是
[1,2,3]4[5]6[7,8]9[10]
我尝试过将列表子列表并手动传递索引。它确实提供了输出,但效率不高
请告知如何动态执行此操作。TIA提供了一个简单的解决方案,索引存储在数组中,列表并不是真正的“拆分”-我使用了一个子列表,它只是一个视图。但它表明了一个想法:
int[] indexes = {3, 5, 8};
List<String> sampleList = new ArrayList<>();
sampleList.add("1");
sampleList.add("2");
sampleList.add("3");
sampleList.add("4");
sampleList.add("5");
sampleList.add("6");
sampleList.add("7");
sampleList.add("8");
sampleList.add("9");
sampleList.add("10");
List<List<String>> result = new ArrayList<>();
int lastIdx = 0;
for (int idx: indexes) {
if (lastIdx < idx) {
//then this subList is not empty
result.add(sampleList.subList(lastIdx, idx));
}
//adding 'idx' element anyway
result.add(sampleList.subList(idx, idx + 1));
lastIdx = idx + 1;
}
result.add(sampleList.subList(lastIdx, sampleList.size()));
System.out.println(result);
我不清楚给定的指数如何与预期产出相对应。“没有效率”到底意味着什么?子列表应该很快,因为它不复制任何内容。请显示您尝试过的实际代码,并解释它是如何无效的。您可以解释拆分3,5和3,5,8如何产生各自的输出吗?请查找我添加的sysout命令。这就是我试图手动拆分列表以获得结果的方式。我们的示例没有提供您所说的输出。它输出以下内容:
[1,2,3]4[5]6[7,8,9,10]
。你能用语言描述一下参数3和5应该做什么吗?
int[] indexes = {3, 5, 8};
List<String> sampleList = new ArrayList<>();
sampleList.add("1");
sampleList.add("2");
sampleList.add("3");
sampleList.add("4");
sampleList.add("5");
sampleList.add("6");
sampleList.add("7");
sampleList.add("8");
sampleList.add("9");
sampleList.add("10");
List<List<String>> result = new ArrayList<>();
int lastIdx = 0;
for (int idx: indexes) {
if (lastIdx < idx) {
//then this subList is not empty
result.add(sampleList.subList(lastIdx, idx));
}
//adding 'idx' element anyway
result.add(sampleList.subList(idx, idx + 1));
lastIdx = idx + 1;
}
result.add(sampleList.subList(lastIdx, sampleList.size()));
System.out.println(result);
[[1, 2, 3], [4], [5], [6], [7, 8], [9], [10]]