Mengembalikan tampilan porsi daftar ini antara yang ditentukan fromIndex, inklusif, dan toIndexeksklusif. (Jika fromIndexdan toIndexsama, daftar yang dikembalikan kosong.) Daftar yang dikembalikan didukung oleh daftar ini, sehingga perubahan non-struktural dalam daftar yang dikembalikan tercermin dalam daftar ini, dan sebaliknya. Daftar yang dikembalikan mendukung semua operasi daftar opsional yang didukung oleh daftar ini.
Contoh:
List<Integer> numbers =newArrayList<Integer>(Arrays.asList(5,3,1,2,9,5,0,7));List<Integer> head = numbers.subList(0,4);List<Integer> tail = numbers.subList(4,8);System.out.println(head);// prints "[5, 3, 1, 2]"System.out.println(tail);// prints "[9, 5, 0, 7]"Collections.sort(head);System.out.println(numbers);// prints "[1, 2, 3, 5, 9, 5, 0, 7]"
tail.add(-1);System.out.println(numbers);// prints "[1, 2, 3, 5, 9, 5, 0, 7, -1]"
Jika Anda membutuhkan daftar cincang ini BUKAN tampilan, maka cukup buat yang baru Listdari subList. Berikut ini contoh menyatukan beberapa hal berikut:
// chops a list into non-view sublists of length Lstatic<T>List<List<T>> chopped(List<T> list,finalint L){List<List<T>> parts =newArrayList<List<T>>();finalint N = list.size();for(int i =0; i < N; i += L){
parts.add(newArrayList<T>(
list.subList(i,Math.min(N, i + L))));}return parts;}List<Integer> numbers =Collections.unmodifiableList(Arrays.asList(5,3,1,2,9,5,0,7));List<List<Integer>> parts = chopped(numbers,3);System.out.println(parts);// prints "[[5, 3, 1], [2, 9, 5], [0, 7]]"
parts.get(0).add(-1);System.out.println(parts);// prints "[[5, 3, 1, -1], [2, 9, 5], [0, 7]]"System.out.println(numbers);// prints "[5, 3, 1, 2, 9, 5, 0, 7]" (unmodified!)
memodifikasi daftar sumber, sementara perulangan melalui sublists, Anda akan mendapatkan pengecualian bersamaan, karena statistik java doc: Daftar luar tidak dapat dimodifikasi, tetapi mencerminkan keadaan terbaru dari daftar sumber. Daftar dalam adalah tampilan sublist dari daftar asli. Ini
Jawaban yang diberikan oleh polygenelubricants membagi array berdasarkan ukuran yang diberikan. Saya sedang mencari kode yang akan membagi array menjadi sejumlah bagian. Ini modifikasi yang saya lakukan pada kode:
publicstatic<T>List<List<T>> chopIntoParts(finalList<T> ls,finalint iParts ){finalList<List<T>> lsParts =newArrayList<List<T>>();finalint iChunkSize = ls.size()/ iParts;int iLeftOver = ls.size()% iParts;int iTake = iChunkSize;for(int i =0, iT = ls.size(); i < iT; i += iTake ){if( iLeftOver >0){
iLeftOver--;
iTake = iChunkSize +1;}else{
iTake = iChunkSize;}
lsParts.add(newArrayList<T>( ls.subList( i,Math.min( iT, i + iTake ))));}return lsParts;}
/**
* Returns List of the List argument passed to this function with size = chunkSize
*
* @param largeList input list to be portioned
* @param chunkSize maximum size of each partition
* @param <T> Generic type of the List
* @return A list of Lists which is portioned from the original list
*/publicstatic<T>List<List<T>> chunkList(List<T> list,int chunkSize){if(chunkSize <=0){thrownewIllegalArgumentException("Invalid chunk size: "+ chunkSize);}List<List<T>> chunkList =newArrayList<>(list.size()/ chunkSize);for(int i =0; i < list.size(); i += chunkSize){
chunkList.add(list.subList(i, i + chunkSize >= list.size()? list.size()-1: i + chunkSize));}return chunkList;}
tolong perhatikan ini memiliki bug yang mengabaikan kumpulan data terakhir. ex 201 dipecah menjadi potongan 100-an akan mengembalikan 100.100,0 bukannya 100.100,1
AAP
13
Java 8
Kami dapat membagi daftar berdasarkan beberapa ukuran atau berdasarkan suatu kondisi.
@i_am_zero Apakah mungkin menerapkan beberapa kondisi (metode statis ketiga) sehingga Anda dapat membuat beberapa daftar dari [[1,2,3,4], [5,6,7,8,9], [10,11,12 , 13,14]] dengan syarat: i <5, 5 <= i <10, i> = 10
gooornik07
2
@ gooornik07 stream hanya dapat digunakan sekali.
akhil_mittal
3
Saya menduga bahwa masalah yang Anda hadapi adalah dengan menyebutkan 100 ArrayLists dan mengisi mereka. Anda bisa membuat array ArrayLists dan mengisi masing-masing menggunakan loop.
Cara paling sederhana (baca paling bodoh) untuk melakukan ini adalah seperti ini:
ArrayList results =newArrayList(1000);// populate results herefor(int i =0; i <1000; i++){
results.add(i);}ArrayList[] resultGroups =newArrayList[100];// initialize all your small ArrayList groupsfor(int i =0; i <100; i++){
resultGroups[i]=newArrayList();}// put your results into those arraysfor(int i =0; i <1000; i++){
resultGroups[i/10].add(results.get(i));}
Terutama Anda dapat menggunakan sublist. Lebih detail di sini: subList
Mengembalikan tampilan porsi daftar ini antara fromIndex, inklusif, dan toIndex, eksklusif. (Jika dariIndex dan toIndex sama, daftar yang dikembalikan kosong.) Daftar yang dikembalikan didukung oleh daftar ini, sehingga perubahan dalam daftar yang dikembalikan tercermin dalam daftar ini, dan sebaliknya. Daftar yang dikembalikan mendukung semua operasi daftar opsional yang didukung oleh daftar ini ...
Buat daftar baru dan tambahkan tampilan sublist dari daftar sumber menggunakan metode addAll untuk membuat daftar sublist baru
newList = new ArrayList (); newList.addAll (sourceList.subList (startIndex, endIndex));
Anda juga dapat menggunakan perpustakaan FunctionalJava - ada partitionmetode untuk List. Lib ini memiliki jenis koleksi sendiri, Anda dapat mengonversinya ke koleksi java bolak-balik.
Apakah ini membagi daftar Anda menjadi 2 Daftar atau 2 nilai per Daftar. Misalnya, jika daftar awal Anda adalah 10 elemen, ini akan menghasilkan 2 daftar 5 atau 5 daftar 2.
@ Jaafar: Saya ingin yang sama seperti tetapi setelah 20 elemen dimuat cetak sekali lagi saya perlu memuat 20 elemen berikutnya dan seterusnya. Jadi tolong sarankan saya untuk ini.
vasantha
Hai @vasantha maaf saya tidak melihat permintaan Anda lebih awal, Anda sudah atau belum?
**Divide a list to lists of n size**import java.util.AbstractList;import java.util.ArrayList;import java.util.List;publicfinalclassPartitionUtil<T>extendsAbstractList<List<T>>{privatefinalList<T> list;privatefinalint chunkSize;privatePartitionUtil(List<T> list,int chunkSize){this.list =newArrayList<>(list);this.chunkSize = chunkSize;}publicstatic<T>PartitionUtil<T> ofSize(List<T> list,int chunkSize){returnnewPartitionUtil<>(list, chunkSize);}@OverridepublicList<T> get(int index){int start = index * chunkSize;int end =Math.min(start + chunkSize, list.size());if(start > end){thrownewIndexOutOfBoundsException("Index "+ index +" is out of the list range <0,"+(size()-1)+">");}returnnewArrayList<>(list.subList(start, end));}@Overridepublicint size(){return(int)Math.ceil((double) list.size()/(double) chunkSize);}}Function call :List<List<String>> containerNumChunks =PartitionUtil.ofSize(list,999)
Anda perlu mengetahui ukuran chunk yang digunakan untuk membagi daftar Anda. Katakanlah Anda memiliki daftar 108 entriesdan Anda memerlukan ukuran chunk 25. Dengan demikian Anda akan berakhir dengan 5 lists:
4 25 entriesmasing - masing memiliki ;
1 (yang kelima) memiliki 8 elements.
Kode:
publicstaticvoid main(String[] args){List<Integer> list =newArrayList<Integer>();for(int i=0; i<108; i++){
list.add(i);}int size= list.size();int j=0;List<List<Integer>> splittedList =newArrayList<List<Integer>>();List<Integer> tempList =newArrayList<Integer>();for(j=0;j<size;j++){
tempList.add(list.get(j));if((j+1)%25==0){// chunk of 25 created and clearing tempList
splittedList.add(tempList);
tempList =null;//intializing it again for new chunk
tempList =newArrayList<Integer>();}}if(size%25!=0){//adding the remaining enteries
splittedList.add(tempList);}for(int k=0;k<splittedList.size(); k++){//(k+1) because we started from k=0System.out.println("Chunk number: "+(k+1)+" has elements = "+splittedList.get(k).size());}}
Jawaban:
Kamu bisa memakai
subList(int fromIndex, int toIndex)
untuk mendapatkan sebagian dari daftar asli.Dari API:
Contoh:
Jika Anda membutuhkan daftar cincang ini BUKAN tampilan, maka cukup buat yang baru
List
darisubList
. Berikut ini contoh menyatukan beberapa hal berikut:sumber
Anda dapat menambahkan perpustakaan Guava ke proyek Anda dan menggunakan metode partisi Lists ., mis
sumber
Apache Commons Collections 4 memiliki metode partisi di
ListUtils
kelas. Begini cara kerjanya:sumber
Jawaban yang diberikan oleh polygenelubricants membagi array berdasarkan ukuran yang diberikan. Saya sedang mencari kode yang akan membagi array menjadi sejumlah bagian. Ini modifikasi yang saya lakukan pada kode:
Semoga ini bisa membantu seseorang.
sumber
Ini bekerja untuk saya
Misalnya:
sumber
Java 8
Kami dapat membagi daftar berdasarkan beberapa ukuran atau berdasarkan suatu kondisi.
Maka kita bisa menggunakannya sebagai:
sumber
Saya menduga bahwa masalah yang Anda hadapi adalah dengan menyebutkan 100 ArrayLists dan mengisi mereka. Anda bisa membuat array ArrayLists dan mengisi masing-masing menggunakan loop.
Cara paling sederhana (baca paling bodoh) untuk melakukan ini adalah seperti ini:
sumber
Pertanyaan serupa didiskusikan di sini, Jawa: membagi Daftar menjadi dua sub-Daftar?
Terutama Anda dapat menggunakan sublist. Lebih detail di sini: subList
sumber
Contoh
Keluaran
CHUNKED :: [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21 , 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44 , 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 65, 66, 67 , 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 89, 90 ], [91, 92, 93, 94, 95, 96, 97, 98, 99, 100], .........
Anda akan melihat di log Anda
sumber
Anda dapat menggunakan
chunk
metode ini dari Eclipse Collections :Beberapa contoh
chunk
metode juga dimasukkan dalam artikel DZone ini .Catatan: Saya pengendara untuk Eclipse Collections.
sumber
Buat daftar baru dan tambahkan tampilan sublist dari daftar sumber menggunakan metode addAll untuk membuat daftar sublist baru
newList = new ArrayList (); newList.addAll (sourceList.subList (startIndex, endIndex));
sumber
Anda juga dapat menggunakan perpustakaan FunctionalJava - ada
partition
metode untukList
. Lib ini memiliki jenis koleksi sendiri, Anda dapat mengonversinya ke koleksi java bolak-balik.sumber
sumber
jika Anda tidak ingin mengimpor pustaka apache commons coba kode sederhana ini:
sumber
Supaya jelas, Ini masih harus diuji lagi ...
sumber
lebih detail: https://e.printstacktrace.blog/divide-a-list-to-lists-of-n-size-in-Java-8/
sumber
Anda perlu mengetahui ukuran chunk yang digunakan untuk membagi daftar Anda. Katakanlah Anda memiliki daftar
108 entries
dan Anda memerlukan ukuran chunk25
. Dengan demikian Anda akan berakhir dengan5 lists
:25 entries
masing - masing memiliki ;8 elements
.Kode:
sumber