Di recente ci siamo trasferiti su Java 8. Ora vedo le applicazioni inondate di Optionaloggetti. Prima di Java 8 (stile 1) Employee employee = employeeServive.getEmployee(); if(employee!=null){ System.out.println(employee.getId()); } Dopo Java 8 (stile 2) Optional<Employee> employeeOptional = Optional.ofNullable(employeeService.getEmployee()); if(employeeOptional.isPresent()){ Employee employee = employeeOptional.get(); System.out.println(employee.getId()); } Non vedo alcun valore aggiunto di …
In Java 8, le interfacce possono contenere metodi implementati, metodi statici e metodi cosiddetti "predefiniti" (che le classi di implementazione non hanno bisogno di sovrascrivere). Dal mio punto di vista (probabilmente ingenuo), non era necessario violare interfacce come questa. Le interfacce sono sempre state un contratto che devi rispettare e …
Nel java.util.functionpacchetto di Java 8 abbiamo: Funzione : accetta un argomento, produce un risultato. Consumatore : accetta un argomento, non produce nulla. Fornitore : non accetta argomenti, produce un risultato. ... : altri casi che trattano primitivi, 2 argomenti, ecc ... Ma devo gestire il caso " non prende argomenti, …
Java 8 ha una libreria completamente nuova per le date e gli orari nel pacchetto java.time, il che è molto gradito a chiunque abbia dovuto usare JodaTime prima o seccarsi nel creare i propri metodi di supporto per l'elaborazione delle date. Molte classi in questo pacchetto rappresentano timestamp e hanno …
I riferimenti ai metodi saltano il sovraccarico del wrapper lambda? Potrebbero in futuro? Secondo il tutorial Java sui riferimenti ai metodi : A volte ... un'espressione lambda non fa altro che chiamare un metodo esistente. In questi casi, è spesso più chiaro fare riferimento al metodo esistente per nome. I …
Apprezzo molto le nuove funzionalità di Java 8 su lambdas e le interfacce dei metodi predefiniti. Tuttavia, mi annoio ancora con le eccezioni verificate. Ad esempio, se voglio solo elencare tutti i campi visibili di un oggetto, vorrei semplicemente scrivere questo: Arrays.asList(p.getClass().getFields()).forEach( f -> System.out.println(f.get(p)) ); Tuttavia, poiché il getmetodo …
for (Canvas canvas : list) { } NetBeans mi suggerisce di usare "operazioni funzionali": list.stream().forEach((canvas) -> { }); Ma perché è preferito ? Semmai, è più difficile da leggere e capire. Stai chiamando stream(), quindi stai forEach()usando un'espressione lambda con parametro canvas. Non vedo come sia più bello del forloop …
Supponiamo di avere un flusso di cose e che voglio "arricchirle" a metà flusso, che posso usare peek()per fare questo, ad esempio: streamOfThings.peek(this::thingMutator).forEach(this::someConsumer); Supponiamo che la mutazione delle cose a questo punto nel codice sia un comportamento corretto - ad esempio, il thingMutatormetodo può impostare il campo "lastProcessed" sull'ora corrente. …
L'introduzione della nuova notazione lambda (vedi ad esempio questo articolo ) in Java 8 richiederà qualche tipo di deduzione di tipo? In tal caso, in che modo il nuovo sistema di tipi avrà un impatto sul linguaggio Java nel suo insieme?
Prendi i due esempi di codice: if(optional.isPresent()) { //do your thing } if(variable != null) { //do your thing } Per quanto ne so, la differenza più ovvia è che l'Opzionale richiede la creazione di un oggetto aggiuntivo. Tuttavia, molte persone hanno iniziato rapidamente ad adottare Optionals. Qual è il …
Quando si utilizzano le nuove API Java8 stream per trovare un elemento specifico in una raccolta, scrivo codice in questo modo: String theFirstString = myCollection.stream() .findFirst() .get(); Qui IntelliJ avverte che get () viene chiamato senza prima controllare isPresent (). Tuttavia, questo codice: String theFirstString = myCollection.iterator().next(); ... non dà …
Mi chiedo se la misurazione della copertura del codice condizionale da parte degli strumenti attuali per Java non sia obsoleta da quando Java 8 è arrivato. Con Java 8 Optionale Streamspesso possiamo evitare rami / loop di codice, il che rende facile ottenere una copertura condizionale molto elevata senza testare …
Mentre sviluppo la mia API che non è legata ad alcun codice legacy, mi trovo spesso a scrivere metodi che sono puramente flussi di pipeline terminati raccogliendo i risultati. Come questo: ImmutableSet<T> deriveSomethingMeaningfulFromPrivateState() { return myPrivateThingies.stream() .map(this::ownerOfThing) .map(Owner::socialStatus) .filter(SocialStatus::isHeAFineMatey) .collect(MyCustomCollectors.toImmutableSet()); } Ora, la maggior parte dei client di questa classe …
Il seguente codice Scala funziona e può essere passato a un metodo Java in attesa di una funzione. C'è un modo più pulito per farlo? Ecco il mio primo passaggio: val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: …
IntelliJ IDEA mi ha consigliato proprio ora di sostituire il seguente ciclo for-each con una chiamata "forEach" Java 8: for (Object o : objects) { if (o instanceof SomeObject) { doSomething(); } } La chiamata consigliata vorrebbe così: objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething()); A meno che non fraintenda …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.