Dalam proyek kami, kami bermigrasi ke java 8 dan kami menguji fitur-fitur baru itu.
Pada proyek saya, saya menggunakan predikat dan fungsi Jambu biji untuk memfilter dan mengubah beberapa koleksi menggunakan Collections2.transformdan Collections2.filter.
Pada migrasi ini saya perlu mengubah misalnya kode jambu biji ke java 8 perubahan. Jadi, perubahan yang saya lakukan adalah seperti:
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);
Untuk...
List<Integer> result2 = naturals.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
Menggunakan jambu biji saya sangat nyaman men-debug kode karena saya dapat men-debug setiap proses transformasi tetapi perhatian saya adalah bagaimana men-debug misalnya .map(n -> n*2).
Menggunakan debugger saya dapat melihat beberapa kode seperti:
@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];
}
Tetapi tidak sesulit Jambu untuk men-debug kode, sebenarnya saya tidak dapat menemukan n * 2transformasinya.
Adakah cara untuk melihat transformasi ini atau cara untuk men-debug kode ini dengan mudah?
EDIT: Saya telah menambahkan jawaban dari komentar yang berbeda dan jawaban diposting
Berkat Holgerkomentar yang menjawab pertanyaan saya, pendekatan memiliki blok lambda memungkinkan saya untuk melihat proses transformasi dan men-debug apa yang terjadi di dalam tubuh lambda:
.map(
n -> {
Integer nr = n * 2;
return nr;
}
)
Berkat Stuart Markspendekatan memiliki referensi metode juga memungkinkan saya untuk men-debug proses transformasi:
static int timesTwo(int n) {
Integer result = n * 2;
return result;
}
...
List<Integer> result2 = naturals.stream()
.map(Java8Test::timesTwo)
.collect(Collectors.toList());
...
Berkat Marlon Bernardesjawaban saya perhatikan bahwa Eclipse saya tidak menunjukkan apa yang seharusnya dan penggunaan peek () membantu menampilkan hasil.








resultvariabel sementara Anda sebagaiInteger. Yang sederhanaintharus dilakukan juga jika Anda melakukanmappingintkeint...