Errore incompatibilità codice

di il
18 risposte

Errore incompatibilità codice

Salve,
andando a fare copia ed incolla del codice del mio collega, ho un problema:
List<String> lista= totale.stream().map(x ->(mioDTO)x).map(mioDTO::getProprietà).filter(Objects::nonNull). continua...
In sostanza a lui nessun problema, a me : x ed Objects "creare una variabile x / Objects", mentre per ::getProprietà e ::nonNull "sintassi non valida".
Premesso che non ho mai usato stream() e lambda, l'errore a cosa può essere dovuto? abbiamo la stessa versione di java.
La mia:
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)

Cambia solo l'ultima riga, ma non so se può avere a che fare con questo problema. Avete idee a riguardo?
Grazie

18 Risposte

  • Re: Errore incompatibilità codice

    WinstonSmith ha scritto:


    andando a fare copia ed incolla del codice del mio collega, ho un problema:
    List<String> lista= totale.stream().map(x ->(mioDTO)x).map(mioDTO::getProprietà).filter(Objects::nonNull). continua...
    In sostanza a lui nessun problema, a me : x ed Objects "creare una variabile x / Objects", mentre per ::getProprietà e ::nonNull "sintassi non valida".
    Purtroppo senza vedere bene il codice nel suo contesto originale (potendo magari vedere es. quel mioDTO), è un po' difficile capire cosa non va.

    Posso dirti sicuramente di prestare attenzione ad Objects, nel senso che nelle applicazioni un po' "grosse" è comune usare molte librerie/framework. E ... c'è il Objects di java.util ma esiste il com.google.common.base.Objects (della Google Guava), esiste il org.assertj.core.internal.Objects (della AssertJ) ecc... Quindi OCCHIO a cosa è stato importato (magari per sbaglio ...).
  • Re: Errore incompatibilità codice

    andbin ha scritto:



    Purtroppo senza vedere bene il codice nel suo contesto originale (potendo magari vedere es. quel mioDTO), è un po' difficile capire cosa non va.

    Posso dirti sicuramente di prestare attenzione ad Objects, nel senso che nelle applicazioni un po' "grosse" è comune usare molte librerie/framework. E ... c'è il Objects di java.util ma esiste il com.google.common.base.Objects (della Google Guava), esiste il org.assertj.core.internal.Objects (della AssertJ) ecc... Quindi OCCHIO a cosa è stato importato (magari per sbaglio ...).
    Eh lo so, purtroppo sono porzioni di codice che non posso postare, pensavo d'avere conferma di qualcosa che non va a livello di versione utilizzata.
    L' Objects importato è quello di java.util, come fatto dal mio collega. Prrovo a clonare il suo progetto e vedo se riscontro lo stesso errore sulla "x", non so come fare.
  • Re: Errore incompatibilità codice

    WinstonSmith ha scritto:


    Eh lo so, purtroppo sono porzioni di codice che non posso postare
    Capisco ma per comprendere il problema bisognerebbe essere lì davanti a tutto il codice. Cosa è totale (e di che tipo e parametrizzato come)? Perché viene fatto un cast di x?
  • Re: Errore incompatibilità codice

    andbin ha scritto:



    Capisco ma per comprendere il problema bisognerebbe essere lì davanti a tutto il codice. Cosa è totale (e di che tipo e parametrizzato come)? Perché viene fatto un cast di x?
    Recuperiamo migliaia di record dal db, quel totale è la lista di dto (di tipo mioDTO) di tutti i record recuperati. Quello che dobbiamo fare è la conta dei record che hanno quella proprietà non nulla e che in caso di valore uguale non deve incrementare il contatore. A livello di query non possiamo fare nulla e ci è stata passata questa soluzione con gli strem perché dicono sia la più veloce. Ed io sono appunto l'unico con errore su x ed objects
  • Re: Errore incompatibilità codice

    Guardando un po appunti e documentazione, credo intanto che ci sia qualcosa da modificare:
    List<mioDTO> totale =  la lista completa dei record recuperati
    List<String> lista= totale.stream().map(x ->(mioDTO)x).map(mioDTO::getProprietà).filter(Objects::nonNull).distinct).collect(Collectors.toList());
    La prima chiamata al metodo map() l'ho tolta perché non serve "castare" ogni elemento della lista visto che è già di quel tipo.
    La chiamata a filter() pure l'ho eliminata visto che quella proprietà sarà sicuramente valorizzata, ma qui non so se ho fatto bene.
    Resta però l'errore di sintassi sul secondo map(), se non ho capito male.. mioDTO rappresenta il singolo elemento della lista (mi dice di creare la variabile.. ma va dichiarata da qualche parte prima?) sul ::getProprietà mi dà errore di sintassi e non me lo spiego proprio...
    List<mioDTO> totale =  la lista completa dei record recuperati
    List<String> lista= totale.stream().map(mioDTO::getProprietà).distinct).collect(Collectors.toList());
  • Re: Errore incompatibilità codice

    WinstonSmith ha scritto:


    La prima chiamata al metodo map() l'ho tolta perché non serve "castare" ogni elemento della lista visto che è già di quel tipo.
    Infatti, quel cast era molto dubbio. Se parti già con un List<mioDTO> la "x" nel map è già di tipo mioDTO !!

    WinstonSmith ha scritto:


    La chiamata a filter() pure l'ho eliminata visto che quella proprietà sarà sicuramente valorizzata, ma qui non so se ho fatto bene.
    Ma non volevi "quella proprietà non nulla" ?

    WinstonSmith ha scritto:


    Resta però l'errore di sintassi sul secondo map(), se non ho capito male.. mioDTO rappresenta il singolo elemento della lista (mi dice di creare la variabile.. ma va dichiarata da qualche parte prima?) sul ::getProprietà mi dà errore di sintassi e non me lo spiego proprio...
    Come è dichiarato il getProprietà? Puoi riportare almeno la signature?

    WinstonSmith ha scritto:


    List<mioDTO> totale =  la lista completa dei record recuperati
    List<String> lista= totale.stream().map(mioDTO::getProprietà).distinct).collect(Collectors.toList());
    Ho aggiunto un ( che mancava.
    List<String> lista= totale.stream().map(mioDTO::getProprietà).distinct().collect(Collectors.toList());
    Come forma di per sé è giusta. Prendi tutti i valori "distinti" di quella proprietà e li collezioni in una list finale.

    WinstonSmith ha scritto:


    ci è stata passata questa soluzione con gli strem perché dicono sia la più veloce. Ed io sono appunto l'unico con errore su x ed objects
    Più veloce (e compatta) come scrittura del codice, sì. Come prestazioni effettive ... ... dipende.
  • Re: Errore incompatibilità codice

    andbin ha scritto:



    Infatti, quel cast era molto dubbio. Se parti già con un List<mioDTO> la "x" nel map è già di tipo mioDTO !!
    Eh questo errore non è mio, non so perché lo abbia messo ma mi sento sicuro nell'eliminarlo.

    andbin ha scritto:



    Ma non volevi "quella proprietà non nulla" ?
    Sì, quindi se è sicuramente valorizzata (il db per quel campo non ammette valori null) non serve fare questo ulteriore controllo.

    andbin ha scritto:



    Più veloce (e compatta) come scrittura del codice, sì. Come prestazioni effettive ... ... dipende.
    Eh infatti poi una volta implementata sarà da vedere quello che accadrà.

    Comunque differiamo solo per la versione della jre.. devo provare a cambiarla e vedere cosa succede.
  • Re: Errore incompatibilità codice

    Una volta scaricata la verione 1.8.0 della jre... cosa devo fare per sostituirla alla mia 1.7 nel mio progetto?
  • Re: Errore incompatibilità codice

    WinstonSmith ha scritto:


    Una volta scaricata la verione 1.8.0 della jre... cosa devo fare per sostituirla alla mia 1.7 nel mio progetto?
    Ma prima avevi già Java 8, l'hai detto all'inizio:

    WinstonSmith ha scritto:


    abbiamo la stessa versione di java.
    La mia:
    java version "1.8.0_241"
    Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
  • Re: Errore incompatibilità codice

    andbin ha scritto:



    Ma prima avevi già Java 8, l'hai detto all'inizio:

    Ma infatti questo mi torna, ma qui io trovo 1.7 e gli altri 1.8:
    https://ibb.co/D1P0Kf
  • Re: Errore incompatibilità codice

    WinstonSmith ha scritto:


    Ma infatti questo mi torna, ma qui io trovo 1.7 e gli altri 1.8:
    https://ibb.co/D1P0Kf
    Allora era per quello che non ti compilava. Stream API, functional interface ecc... si possono usare solo da Java 8. Se hai un Java 7 non ti compila/funziona un bel nulla di quello!
  • Re: Errore incompatibilità codice

    andbin ha scritto:



    Allora era per quello che non ti compilava. Stream API, functional interface ecc... si possono usare solo da Java 8. Se hai un Java 7 non ti compila/funziona un bel nulla di quello!
    Il bello è che mi è stato dato così e detto di non toccare nulla
    quindi adesso mi sapresti dire come proseguire?
    Build path ed... add externalJARs? A questo punto cosa bisogna selezionare?
    Ho questo e Non vorrei far casini, che devo rilasciare a brevissimo

    https://ibb.co/JpsjBk
  • Re: Errore incompatibilità codice

    WinstonSmith ha scritto:


    Il bello è che mi è stato dato così e detto di non toccare nulla
    Il progetto è basato su Maven? Se sì, che cosa specifica il pom.xml per la versione di Java richiesta?
  • Re: Errore incompatibilità codice

    andbin ha scritto:



    Il progetto è basato su Maven? Se sì, che cosa specifica il pom.xml per la versione di Java richiesta?
    Sì, la 8
Devi accedere o registrarti per scrivere nel forum
18 risposte