In unserem Projekt migrieren wir auf Java 8 und testen die neuen Funktionen.
In meinem Projekt verwende ich Guava-Prädikate und -Funktionen, um einige Sammlungen mit Collections2.transformund zu filtern und zu transformieren Collections2.filter.
Bei dieser Migration muss ich zum Beispiel Guavencode in Java 8 ändern. Die Änderungen, die ich vornehme, sind folgende:
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);
Zu...
List<Integer> result2 = naturals.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
Mit Guave war ich sehr komfortabel beim Debuggen des Codes, da ich jeden Transformationsprozess debuggen konnte, aber mein Anliegen ist beispielsweise das Debuggen .map(n -> n*2).
Mit dem Debugger kann ich folgenden Code sehen:
@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];
}
Aber es ist nicht so einfach wie Guava, den Code zu debuggen, eigentlich konnte ich die n * 2Transformation nicht finden .
Gibt es eine Möglichkeit, diese Transformation zu sehen oder diesen Code einfach zu debuggen?
BEARBEITEN: Ich habe Antworten aus verschiedenen Kommentaren hinzugefügt und Antworten gepostet
Dank eines HolgerKommentars, der meine Frage beantwortete, ermöglichte mir der Ansatz, einen Lambda-Block zu haben, den Transformationsprozess zu sehen und zu debuggen, was im Lambda-Körper passiert ist:
.map(
n -> {
Integer nr = n * 2;
return nr;
}
)
Dank Stuart Marksdes Ansatzes, Methodenreferenzen zu haben, konnte ich auch den Transformationsprozess debuggen:
static int timesTwo(int n) {
Integer result = n * 2;
return result;
}
...
List<Integer> result2 = naturals.stream()
.map(Java8Test::timesTwo)
.collect(Collectors.toList());
...
Dank der Marlon BernardesAntwort bemerkte ich, dass meine Eclipse nicht anzeigt, was sie sollte, und die Verwendung von peek () half, Ergebnisse anzuzeigen.








resultVariable nicht als deklarierenInteger. Eine einfacheintsollten auch tun , wenn Sie sindmapPing einintzu einemint...