-2
votes

Comment corriger le code ci-dessous pour obtenir la sortie comme prévu?

05/07/2020=(material:96113 date:05/07/2020 quantity:9), 05/06/2020=(material:96112 date:05/06/2020 quantity:13)}

5 commentaires

Partagez l'objet de données aussi


Par quels critères voulez-vous grouper? date ou matériau ou les deux? Pour ce dernier, vous auriez besoin d'une structure de carte imbriquée: mappe >


Basé à la date, nous devons mapper. Pour la même date, nous pouvons également avoir un matériau différent, puis il devrait s'afficher comme séparé.


Ensuite, utilisez mappe > ou mappe > et vérifier pour différents matériaux pour ajouter séparément la liste ou la carte


La classe d'objet de données contient la méthode des getters and Setters


3 Réponses :


1
votes

de ce que vous avez fourni peut avoir une carte code> de de la carte code> S, groupé par date code>, puis par matériau / code>, et comme vous avez seulement une valeur à gauche, la Quanity (les autres valeurs sont déjà fournies par la clé dans la carte code>), vous pouvez utiliser ce format:

[(material=96113, date=05/07/2020, quantity=9), (material=96111, date=05/06/2020, quantity=10), (material=96112, date=05/06/2020, quantity=3)]


4 commentaires

@Eklavya c'est très adapté aux usages comme ceux-ci


Bien sûr, parfois, je suis confondu avec la publication d'une réponse à l'aide de Stream API (quand op ne l'utilise pas)


Comment vérifier la sortie. J'ai utilisé s.o.p (carte); Je reçois une sortie comme {05/07/2020=COM.IIB.RESERVATION.DATA@4517D9A3, 05/06/2020=COM.IIB.RESERVATION.DATA@372F7A8D}.


@rojasimple Je suis désolé, je ne comprends pas vraiment ce que votre problème est. La sortie que vous avez montrée de votre ancien code ou de celle que j'ai fournie? La méthode tostring () correctement implémentée correctement?



-2
votes

Basé sur ce que j'ai compris, je pense que c'est ce que vous demandez:

for(Data obj : list) {
    if (map.containsKey(obj.getDate())) { // If that key exists
        if(map.get(obj.getDate()).getMaterial() == obj.getMaterial()){ // and if the material is also same
            map.put(obj.getDate(),new Data(map.get(obj.getDate()).getQuantity() + (obj.getQuantity()), obj.getDate(), obj.getMaterial())); // update the item
        }
        else{
            map.put(obj.getDate(),obj); // if material is not same
        }
    } 
    else {
        map.put(obj.getDate(),obj); // if key don't exists, add a new item
    }        
}


5 commentaires

Utilisez .equals () au lieu de = = =


Comment la clé de date multiples contient-elle sur la carte?


Si le matériau n'est pas identique, ajoutez simplement un nouvel élément -> il ne sera pas ajouté , mais l'ancien sera écrasé!


@Lino Oops, tu as raison !! Merci d'avoir fait remarquer cela. C'était si évident. Comment ça m'a manqué !! :)


J'ai aussi essayé ce code. Je reçois la sortie comme {05/07/2020=COM.IIB.RESERVATION.DATA@4517D9A3, 05/06/2020=COM.IIB.RESERVATION.DATA@372F7A8D}



0
votes

Vous pouvez utiliser l'API de flux pour résoudre ce problème. Utilisation de Collecteurs.Tomap Carte par date et matériaux. Fusionner la quantité et collecter. Ensuite, obtenez les valeurs de carte définies dans la liste. XXX

Vous pouvez tester le code en ligne en ligne ici


0 commentaires