Java split Arraylist en petits ArrayLists
J'ai une liste de tableaux avec une taille de 258
J'aimerais maintenant divisé en trois différentes ArrayLists pour cela, j'ai créé le code suivant:
Integer start = (int) Math.floor((sitesToSearch.size() / 3));
Integer middle = (int) Math.floor((sitesToSearch.size() / 2));
Integer end = (int) Math.floor((sitesToSearch.size() / 1));
ArrayList<String> crawl_list1 = (ArrayList<String>)tmp.subList(0, start);
ArrayList<String> crawl_list2 = (ArrayList<String>)tmp.subList(start+1, middle);
ArrayList<String> crawl_list3 = (ArrayList<String>)tmp.subList(middle+1, end);
Malheureusement, cela déclenche le message d'erreur suivant:
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList$SubList cannot be cast to java.util.ArrayList
Alors, comment puis-je diviser en trois petits ArrayList
tmp declaration:
public ArrayList<String> getExternalLinks(ArrayList<String> rootDomains){
ArrayList<String> result = new ArrayList<String>();
Document doc = null;
/*
* Check if root is valid
* Find search the site for internal links
*/
for (String root : rootDomains) {
if (!(root == null) || !root.isEmpty() ||!root.contains("#")) {
try {
doc = Jsoup.connect(root)
.userAgent("Mozilla")
.get();
result.addAll(findExternalLinks(findInternalLinks(doc,root),root));
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(result.size());
return result;
}
- Comment définissez-vous tmp? et comment il est peuplé?
- Pouvez-vous s'il vous plaît montrer la decleration de
tmp
- Quelle est la relation entre
sitesToSearch
ettmp
? - double possible de casting Tableaux.asList provoquant exception: java.util.Tableaux$ArrayList ne peut pas être lancé à java.util.ArrayList
Vous devez vous connecter pour publier un commentaire.
Simplement utiliser
List<String>
que le type decrawl_list1
.C'est juste une application de la règle générale de "le code par rapport à l'interface".
Il n'y a vraiment aucune bonne raison pour exiger le retour de la valeur de
subList
être unArrayList
(et ça n'a pas de sens en tant quesubList
renvoie une vue sur l'originalArrayList
).Si vous absolument besoin
ArrayList
objets, vous devez copier le contenu dans nouveauArrayList
objets:List
aussi facilement que sur uneArrayList
.List
partout qu'une méthode retourne leList
. Utilisez uniquementArrayList
lorsque vous avez besoin d'instancier un nouveau vous-même.Iterable
(qui comprendCollection
qui comprendList
).ArrayList
dans votre code simplement avecList
(sauf si vous nenew ArrayList()
).new List()
parce queList
est une interface. C'est le seul endroit où vous devez toujours utilisernew ArrayList()
même si vous code par rapport à l'interface. Dans tous les autres endroits, vous devez tout simplement utiliserList
au lieu deArrayList
.Regarder la javadoc pour
ArrayList.subList()
. Il ne retourne pas uneArrayList
. Elle renvoie uneList
. Il n'y a pas de raison de lancer cette liste à une liste de tableaux. C'est une liste, et c'est tout ce que vous devez savoir:Aussi, vous devriez vérifier vos indices, parce que la fin de l'index transmis à la sous-liste est exclusif.
.sous-liste(fromIndex, toIndex) est inclus pour fromIndex et exclusive pour toIndex. Avec le code actuel du milieu et de démarrage ne sera jamais remplir une liste de tableaux.
Ci-dessous deux sont des hypothèses de la logique:
.sous-liste(début, milieu)
.sous-liste(mi+1)