Efficient way to divide a list into lists of n size

前端 未结 14 1270
无人共我
无人共我 2020-11-27 16:59

I have an ArrayList, which I want to divide into smaller Lists of n size, and perform an operation on each. My current method of doing this is

implemented with Array

14条回答
  •  醉梦人生
    2020-11-27 17:35

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class SubListTest
    {
        public static void main(String[] args)
        {
            List alphabetNames = new ArrayList();
    
            // populate alphabetNames array with AAA,BBB,CCC,.....
            int a = (int) 'A';
            for (int i = 0; i < 26; i++)
            {
                char x = (char) (a + i);
                char[] array = new char[3];
                Arrays.fill(array, x);
                alphabetNames.add(new String(array));
            }
    
            int[] maxListSizes = new int[]
            {
                5, 10, 15, 20, 25, 30
            };
    
            for (int maxListSize : maxListSizes)
            {
                System.out.println("######################################################");
                System.out.println("Partitioning original list of size " + alphabetNames.size() + " in to sub lists of max size "
                    + maxListSize);
    
                ArrayList> subListArray = new ArrayList>();
                if (alphabetNames.size() <= maxListSize)
                {
                    subListArray.add(alphabetNames);
                }
                else
                {
                    // based on subLists of maxListSize X
                    int subListArraySize = (alphabetNames.size() + maxListSize - 1) / maxListSize;
                    for (int i = 0; i < subListArraySize; i++)
                    {
                        subListArray.add(alphabetNames.subList(i * maxListSize,
                            Math.min((i * maxListSize) + maxListSize, alphabetNames.size())));
                    }
                }
    
                System.out.println("Resulting number of partitions " + subListArray.size());
    
                for (List subList : subListArray)
                {
                    System.out.println(subList);
                }
            }
        }
    }
    

    Output:

    ######################################################
    Partitioning original list of size 26 in to sub lists of max size 5
    Resulting number of partitions 6
    [AAA, BBB, CCC, DDD, EEE]
    [FFF, GGG, HHH, III, JJJ]
    [KKK, LLL, MMM, NNN, OOO]
    [PPP, QQQ, RRR, SSS, TTT]
    [UUU, VVV, WWW, XXX, YYY]
    [ZZZ]
    ######################################################
    Partitioning original list of size 26 in to sub lists of max size 10
    Resulting number of partitions 3
    [AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH, III, JJJ]
    [KKK, LLL, MMM, NNN, OOO, PPP, QQQ, RRR, SSS, TTT]
    [UUU, VVV, WWW, XXX, YYY, ZZZ]
    ######################################################
    Partitioning original list of size 26 in to sub lists of max size 15
    Resulting number of partitions 2
    [AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH, III, JJJ, KKK, LLL, MMM, NNN, OOO]
    [PPP, QQQ, RRR, SSS, TTT, UUU, VVV, WWW, XXX, YYY, ZZZ]
    ######################################################
    Partitioning original list of size 26 in to sub lists of max size 20
    Resulting number of partitions 2
    [AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH, III, JJJ, KKK, LLL, MMM, NNN, OOO, PPP, QQQ, RRR, SSS, TTT]
    [UUU, VVV, WWW, XXX, YYY, ZZZ]
    ######################################################
    Partitioning original list of size 26 in to sub lists of max size 25
    Resulting number of partitions 2
    [AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH, III, JJJ, KKK, LLL, MMM, NNN, OOO, PPP, QQQ, RRR, SSS, TTT, UUU, VVV, WWW, XXX, YYY]
    [ZZZ]
    ######################################################
    Partitioning original list of size 26 in to sub lists of max size 30
    Resulting number of partitions 1
    [AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH, III, JJJ, KKK, LLL, MMM, NNN, OOO, PPP, QQQ, RRR, SSS, TTT, UUU, VVV, WWW, XXX, YYY, ZZZ]
    

提交回复
热议问题