如何基于动态传递的索引高效地拆分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");

我有一个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");
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]]