Renvoie une vue de la partie de cette liste entre le spécifié fromIndex, inclusif et toIndexexclusif. (Si fromIndexet toIndexsont égaux, la liste renvoyée est vide.) La liste renvoyée est soutenue par cette liste, donc les modifications non structurelles de la liste renvoyée sont reflétées dans cette liste, et vice-versa. La liste renvoyée prend en charge toutes les opérations de liste facultatives prises en charge par cette liste.
Exemple:
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]"
Si vous avez besoin que ces listes hachées ne soient PAS une vue, créez simplement une nouvelle à Listpartir de subList. Voici un exemple de regroupement de quelques-unes de ces choses:
// 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!)
modifier la liste source, tout en parcourant les sous-listes, vous obtiendrez une exception simultanée, car java doc stats: La liste externe n'est pas modifiable, mais reflète le dernier état de la liste source. Les listes internes sont des vues de sous-liste de la liste d'origine. C'est
La réponse fournie par les lubrifiants polygéniques divise un tableau en fonction de la taille donnée. Je cherchais du code qui diviserait un tableau en un nombre donné de parties. Voici la modification que j'ai apportée au code:
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;}
@i_am_zero Est-il possible d'appliquer plusieurs conditions (troisième méthode statique) afin de pouvoir créer plusieurs listes ex [[1,2,3,4], [5,6,7,8,9], [10,11,12 , 13,14]] sous conditions: i <5, 5 <= i <10, i> = 10
gooornik07
2
@ gooornik07 un flux ne peut être utilisé qu'une seule fois.
akhil_mittal
3
Je suppose que le problème que vous rencontrez est de nommer 100 listes de tableaux et de les remplir. Vous pouvez créer un tableau de listes de tableaux et remplir chacun de ceux-ci à l'aide d'une boucle.
La façon la plus simple (à lire la plus stupide) de procéder est la suivante:
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));}
Vous pouvez principalement utiliser la sous-liste. Plus de détails ici: subList
Renvoie une vue de la partie de cette liste entre fromIndex, inclus et toIndex, exclusif. (Si fromIndex et toIndex sont égaux, la liste renvoyée est vide.) La liste renvoyée est soutenue par cette liste, donc les changements dans la liste retournée sont reflétés dans cette liste, et vice-versa. La liste renvoyée prend en charge toutes les opérations de liste facultatives prises en charge par cette liste ...
Créez une nouvelle liste et ajoutez une vue de sous-liste de la liste source en utilisant la méthode addAll pour créer une nouvelle liste de sous-
liste newList = new ArrayList (); newList.addAll (sourceList.subList (startIndex, endIndex));
Vous pouvez également utiliser la bibliothèque FunctionalJava - il existe une partitionméthode pour List. Cette bibliothèque a ses propres types de collection, vous pouvez les convertir en collections java dans les deux sens.
Est-ce que cela divise votre liste en 2 listes ou 2 valeurs par liste. Par exemple, si votre liste initiale était de 10 éléments, cela donnerait-il 2 listes de 5 ou 5 listes de 2.
@Jaafar: Je veux la même chose, mais après 20 éléments chargés, imprimer, encore une fois, je dois charger les 20 éléments suivants et ainsi de suite. Veuillez donc me suggérer pour cela.
vasantha
Salut @vasantha désolé, je n'ai pas vu votre demande tôt, vous l'avez fait ou pas encore?
B.JAAFAR
0
Juste pour être clair, cela doit encore être testé plus ...
**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)
Vous devez connaître la taille des morceaux par lesquels vous divisez votre liste. Supposons que vous ayez une liste 108 entrieset que vous ayez besoin d'une taille de morceau de 25. Ainsi vous vous retrouverez avec 5 lists:
4 ayant 25 entrieschacun;
1 (le cinquième) ayant 8 elements.
Code:
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());}}
Réponses:
Vous pouvez utiliser
subList(int fromIndex, int toIndex)
pour obtenir une vue d'une partie de la liste d'origine.Depuis l'API:
Exemple:
Si vous avez besoin que ces listes hachées ne soient PAS une vue, créez simplement une nouvelle à
List
partir desubList
. Voici un exemple de regroupement de quelques-unes de ces choses:la source
Vous pouvez ajouter la bibliothèque Guava à votre projet et utiliser la méthode Lists.partition , par exemple
la source
Apache Commons Collections 4 a une méthode de partition dans la
ListUtils
classe. Voici comment ça fonctionne:la source
La réponse fournie par les lubrifiants polygéniques divise un tableau en fonction de la taille donnée. Je cherchais du code qui diviserait un tableau en un nombre donné de parties. Voici la modification que j'ai apportée au code:
J'espère que cela aide quelqu'un.
la source
Ça marche pour moi
Par exemple :
la source
Java 8
Nous pouvons diviser une liste en fonction d'une certaine taille ou en fonction d'une condition.
Ensuite, nous pouvons les utiliser comme:
la source
Je suppose que le problème que vous rencontrez est de nommer 100 listes de tableaux et de les remplir. Vous pouvez créer un tableau de listes de tableaux et remplir chacun de ceux-ci à l'aide d'une boucle.
La façon la plus simple (à lire la plus stupide) de procéder est la suivante:
la source
Une question similaire a été discutée ici, Java: diviser une liste en deux sous-listes?
Vous pouvez principalement utiliser la sous-liste. Plus de détails ici: subList
la source
Exemple
Production
RÉPARTI :: [[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, 66, 67 , 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90 ], [91, 92, 93, 94, 95, 96, 97, 98, 99, 100], .........
vous verrez dans votre journal
la source
Vous pouvez utiliser la
chunk
méthode des collections Eclipse :Quelques exemples de la
chunk
méthode ont également été inclus dans cet article DZone .Remarque: je suis un committer pour les collections Eclipse.
la source
Créez une nouvelle liste et ajoutez une vue de sous-liste de la liste source en utilisant la méthode addAll pour créer une nouvelle liste de sous-
liste newList = new ArrayList (); newList.addAll (sourceList.subList (startIndex, endIndex));
la source
Vous pouvez également utiliser la bibliothèque FunctionalJava - il existe une
partition
méthode pourList
. Cette bibliothèque a ses propres types de collection, vous pouvez les convertir en collections java dans les deux sens.la source
la source
si vous ne voulez pas importer la bibliothèque apache commons, essayez ce code simple:
la source
Juste pour être clair, cela doit encore être testé plus ...
la source
plus de détails: https://e.printstacktrace.blog/divide-a-list-to-lists-of-n-size-in-Java-8/
la source
Vous devez connaître la taille des morceaux par lesquels vous divisez votre liste. Supposons que vous ayez une liste
108 entries
et que vous ayez besoin d'une taille de morceau de25
. Ainsi vous vous retrouverez avec5 lists
:25 entries
chacun;8 elements
.Code:
la source