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èsispresent code> comme danslist 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>