Ho una lista di liste:Trova il numero di elementi tra più elenchi e combina; rimuovere se/else complesso?
List<List<String>> someList = new List<List<>>();
La dimensione massima di una lista è cinque corde. E 'qualcosa di simile di seguito:
someList.get(0).size(); // 4 elements
someList.get(1).size(); // 1 elements
someList.get(2).size(); // 3 elements
someList.get(3).size(); // 1 elements
...
Sto cercando di escogitare un metodo per creare un nuovo elenco di una dimensione specifica (1-5 elementi) mediante la combinazione di alcune delle liste nidificate di cui sopra. Avrei potuto fare qualcosa di simile al di sotto (in questo esempio, tre elementi):
public List<String> getThree() {
for (int j = 0; j < someList.size(); j++) {
//look for nested lists of size 3
if (someList.get(j).size() == 3) {
return someList.get(j);
}
for (int j = 0; j < someList.size(); j++) {
//if found nested list of size 2, find one of size 1 to combine
if (someList.get(j).size() == 2) {
for (int k = 0; k < someList.size(); k++) {
if (someList.get(k).size() == 1) {
return someList.get(j).add(someList.get(k).get(0));
}
}
}
for (int j = 0; j < someList.size(); j++) {
//if found nested list of size 1, find one of size 2 to combine
if (someList.get(j).size() == 1) {
for (int l = 0; l < someList.size(); l++) {
if (someList.get(l).size() == 2) {
return someList.get(j).addAll(someList.get(l));
}
}
}
}
}
Non ho incluso l'anello per se non sottoliste sono di dimensioni 2, per trovare tre di dimensioni 1, ma si può immaginare quanto lungo e quanto può essere brutto. L'ordine è importante, quindi i cicli for si incrementano sequenzialmente (cioè preferisco combinare la sottolista 1 + 2 in più di 2 + 3, 1 + 3 in più di 2 + 3, ecc.).
Spero di trovare un modo per implementarlo in modo dinamico. Posso solo capire quanto sia illeggibile e lungo il metodo getFive
verrà fornita la mia attuale metodologia. Ho diversi metodi (getOne attraverso getFive), non ha bisogno di essere dinamico in questo senso, vorrei solo liberarmi di molti if/else e loop per ridurre la complessità e migliorare la leggibilità.
Devo dire che questo è il lavoro a casa, quindi non voglio una risposta specifica, ma una spinta nella giusta direzione. Qualcosa modulo
forse? Per fare con i resti?
modifica; chiarire e dare un esempio:
aList = new List<String>;
aList.add("a");
aList.add("b");
someList.add(aList);
bList = new List<String>;
bList.add("c");
someList.add(bList);
newList = someList.getThree();
//newList.size() == 3
//newList contains "a","b","c"
Procedimento getThree()
sta creando un nuovo elenco comprendente elementi delle sottoliste di someList
. Non può dividere una sottolista (cioè non può prendere 1 elemento da una sottolista di 2 elementi), sta combinando intere sottoliste.
Stai cercando di trasformare l'elenco degli elenchi in un unico elenco? Sto capendo questo giusto? – Forseth11
Devo andare per circa un'ora, e se a questa domanda non viene data risposta, penso di avere una risposta per te. – Forseth11
È importante quali liste combinate e quale ordine sono gli articoli? Supponiamo che tu abbia 'myList' con size' {1, 3, 2, 4, 1} ', e vuoi un elenco risultante di' size = 5', che tutte le seguenti combinazioni considerino le soluzioni? '{1 + 3 + 1}', '{3 + 2}', '{4 + uno 1}'. – mkobit