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());
3 Réponses :
Utiliser distinct () code>
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());
D'accord, merci à tous pour vos réponses, appelant le get () b> sur le CurrentItems b> effectivement résolu l'erreur.
Le problème est que vous essayez de créer un flux d'une liste facultative et d'une liste. Appelant get () code> 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. P>
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.
une faute de frappe? Vous venez de ne pas appeler
obtenez code> après
ispresent code> comme dans
list allitems = flux.of (actualItems.get (), itemSadd). :: Stream) .Collect (collectionneurs.tolist ()); Code> 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 ()); code>