0
votes

Comment fusionner deux liste de chaîne dans une liste sans dupliquer dans le flux Java 8

Ici, j'ai deux listes d'articles que je souhaite fusionner dans une liste et supprimez dupliquer avant d'économiser sur la base de données. Mais je reçois une erreur que "méthode non statique ne peut être référencée d'un contexte statique". Bien que je sache la signification de ce message, je ne sais pas comment résoudre dans ce contexte de flux Java8. S'il vous plaît, aide.

 public void addItems(String shopId, List<String>itemsToAdd, String adminId) {
    final Shop  shop = shopSrevice.getShopById(shopId);
    final Optional<List<String>> currentItems= shop.getCurrentItems();
    if (currentItems.isPresent()){
        List<String> allItems = Stream.of(currentItems,itemsToAdd)
                .flatMap(Collection::stream)
                .collect(Collectors.toList());


1 commentaires

une faute de frappe? Vous venez de ne pas appeler obtenez après ispresent comme dans list allitems = flux.of (actualItems.get (), itemSadd). :: Stream) .Collect (collectionneurs.tolist ()); et éventuellement sans chèque que vous pouvez simplement effectuer Liste allitems = flux.of (CurrentItems.orelse (Collections.Pharitylist ()) , itemSaddd) .flatmap (collection :: flux) .Collect (collectionneurs.tolist ());


3 Réponses :


0
votes

Utiliser distinct () xxx


0 commentaires

0
votes

CurrentItems code> n'est pas une liste code> mais un en option code>, par conséquent, les méthodes suivantes ne font pas de sens. Déballez le en option code> et donc courantItems.ispresent () code> peut être omis. La méthode flux :: distincte code> assure des éléments uniques (ou utilisez définir code> à la place):

final Shop  shop = shopSrevice.getShopById(shopId);
final Optional<List<String>> currentItems= shop.getCurrentItems();
final List<String> currentItemsList = currentItems.orElse(Collections.emptyList());

List<String> allItems = Stream.of(currentItemsList, itemsToAdd)
     .flatMap(Collection::stream)
     .distinct()
     .collect(Collectors.toList());


1 commentaires

D'accord, merci à tous pour vos réponses, appelant le get () sur le CurrentItems effectivement résolu l'erreur.



0
votes

Le problème est que vous essayez de créer un flux d'une liste facultative et d'une liste. Appelant get () sur CurrentItems résout cette erreur et ne doit pas être un problème car vous vérifiez déjà s'il est présent.


2 commentaires

Oui, bro, appeler le get () sur les actualités a réellement résolu l'erreur. Merci.


Cela ne fonctionne pas, cela ne fonctionne que si facultatif n'est pas vide qui n'est pas garanti. Si la facultative est vide, une exception est lancée. C'est pourquoi j'ai suggéré d'utiliser la méthode facultative.Orelse qui fournit une collection vide à revenir lorsque la facultative est vide.