2010-06-06 7 views
0

J'ai deux listes de chaînes de tableau. Je veux être capable de créer une nouvelle liste (newList) en combinant les 2 listes. Mais il doit répondre à ces trois conditions:Java: combiner 2 Liste <String[]>

1) Copiez le contenu de store_inventory dans newList.

2) Ensuite, si les noms d'articles dans store_inventory & new_acquisitions correspondent, il suffit d'ajouter les deux quantités ensemble et de le changer dans newList.

3) Si new_acquisitions a un nouvel élément qui n'existe pas dans store_inventory, ajoutez-le à newList.

Les titres de la liste CSV sont: Nom de l'article, Quantité, Coût, Prix.

La liste contient une chaîne [] de nom, de quantité, de coût et de prix pour chaque ligne.

CSVReader from = new CSVReader(new FileReader("/test/new_acquisitions.csv")); 
    List <String[]> acquisitions = from.readAll(); 

    CSVReader to = new CSVReader(new FileReader("/test/store_inventory.csv")); 
    List <String[]> inventory = to.readAll(); 

    List <String[]> newList; 

Tout code pour me lancer serait génial! =]

ce que j'ai jusqu'à présent ...

 for (int i = 0; i < acquisitions.size(); i++) { 
     temp1 = acquisitions.get(i); 
     for (int j = 1; j < inventory.size(); j++) { 
      temp2 = inventory.get(j); 
      if (temp1[0].equals(temp2[0])) { 
       //if match found... do something? 



       //break out of loop 
      } 
     } 
     //if new item found... do something? 
    } 
+0

prêt à basculer 20 $ par paypal si quelqu'un peut me donner le code pour cela (s'ils veulent l'argent) = D – nubme

+0

Dommage que vous ne pouvez pas offrir une prime sur le SO;) Bien que, PayPal pourrait amener les gens motivé plus facilement. –

+0

lol ya, ce serait bon pour SO – nubme

Répondre

4

Je commencerais par la construction de la newList comme HashMap ou TreeMap au lieu d'une liste. Cela facilite la recherche de l'enregistrement correspondant. En outre, je convertirais le String [] en un objet personnalisé (par exemple Record) qui contient le nom, la quantité, le coût et le champ de prix. Cela prendrait soin de copier l'information. Le vous pouvez essayer quelque chose comme ceci:

Map<String, Record> newMap = new TreeMap<String, Record>(); 
for(String[] ss : acquisitions) { 
    Record rec = Record.parse(ss); // For requirement (1) 
    newMap.put(rec.getName(), rec); 
} 

for(String[] ss : inventory) { 
    Record rec = Record.parse(ss); // For requirement (1) 
    if(newMap.containsKey(rec.getName())) { 
     // For requirement (2) 
     // The mergeWith method can then add quantities together 
     newMap.get(rec.getName()).mergeWith(rec); 
    } else { 
     // For requirement (3) 
     newMap.put(rec.getName(), rec); 
    } 
} 

modifier Un avantage supplémentaire d'avoir un objet Record, est qu'il peut être imprimé à l'écran beaucoup plus facile en mettant en œuvre la fonction toString.

public class Record implements Comparable<Record> { 
    public static Record parse(String[] ss) { 
     // TODO: implement some basic parsing 
    } 

    private String name; 
    private int quantity; 
    private BigDecimal cost, price; 

    private Record() {} 

    public String getName() { return name; } 
    public int getQuantity() { return quantity; } 
    public BigDecimal getCost() { return cost; } 
    public BigDecimal getPrice() { return price; } 

    public int compareTo(Record other) { 
     return this.name.compareTo(other.name); 
    } 

    public String toString() { 
     return name; 
    } 
} 
+0

+1 pour suggérer un TreeMap –

+0

im nouveau à la programmation, vous mentionnez tous ces concepts que je n'ai pas encore appris. l'esprit juste en écrivant le code dont j'ai besoin, vous semblez en avoir déjà beaucoup fait déjà. avez-vous un paypal? + D – nubme

+0

Il s'agit d'un code Java très simple lorsque vous commencez à comprendre les bases. L'écriture de code à l'aide de tableaux de chaînes est très compliquée, tandis que lors de l'utilisation d'objets personnalisés, le code devient très lisible. Je conseillerais d'essayer de comprendre les bases de Maps (savez-vous pourquoi j'ai conseillé le TreeMap?) Et les objets (savez-vous pourquoi j'ai implémenté l'interface Comparable?). – Marc