Nel nostro progetto stiamo migrando a java 8 e ne stiamo testando le nuove funzionalità.
Nel mio progetto sto usando predicati e funzioni Guava per filtrare e trasformare alcune raccolte usando Collections2.transforme Collections2.filter.
In questa migrazione ho bisogno di cambiare ad esempio il codice guava in Java 8 modifiche. Quindi, i cambiamenti che sto facendo sono il tipo di:
List<Integer> naturals = Lists.newArrayList(1,2,3,4,5,6,7,8,9,10,11,12,13);
Function <Integer, Integer> duplicate = new Function<Integer, Integer>(){
@Override
public Integer apply(Integer n)
{
return n * 2;
}
};
Collection result = Collections2.transform(naturals, duplicate);
Per...
List<Integer> result2 = naturals.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
Usando guava sono stato molto a mio agio nel debug del codice poiché potevo eseguire il debug di ogni processo di trasformazione, ma la mia preoccupazione è come eseguire il debug, ad esempio .map(n -> n*2).
Usando il debugger posso vedere del codice come:
@Hidden
@DontInline
/** Interpretively invoke this form on the given arguments. */
Object interpretWithArguments(Object... argumentValues) throws Throwable {
if (TRACE_INTERPRETER)
return interpretWithArgumentsTracing(argumentValues);
checkInvocationCounter();
assert(arityCheck(argumentValues));
Object[] values = Arrays.copyOf(argumentValues, names.length);
for (int i = argumentValues.length; i < values.length; i++) {
values[i] = interpretName(names[i], values);
}
return (result < 0) ? null : values[result];
}
Ma non è così semplice come Guava eseguire il debug del codice, in realtà non sono riuscito a trovare la n * 2trasformazione.
C'è un modo per vedere questa trasformazione o un modo per eseguire facilmente il debug di questo codice?
EDIT: ho aggiunto la risposta da diversi commenti e le risposte pubblicate
Grazie al Holgercommento che ha risposto alla mia domanda, l'approccio di avere il blocco lambda mi ha permesso di vedere il processo di trasformazione ed eseguire il debug di ciò che è accaduto all'interno del corpo lambda:
.map(
n -> {
Integer nr = n * 2;
return nr;
}
)
Grazie Stuart Marksall'approccio di avere riferimenti al metodo mi ha anche permesso di eseguire il debug del processo di trasformazione:
static int timesTwo(int n) {
Integer result = n * 2;
return result;
}
...
List<Integer> result2 = naturals.stream()
.map(Java8Test::timesTwo)
.collect(Collectors.toList());
...
Grazie alla Marlon Bernardesrisposta ho notato che il mio Eclipse non mostra quello che dovrebbe e l'uso di peek () ha aiutato a visualizzare i risultati.








resultvariabile temporanea comeInteger. Un sempliceintdovrebbe andare bene anche se stai facendomapun pinginta unint...