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.transform
dan 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 * 2
transformasinya.
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 Holger
komentar 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 Marks
pendekatan 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 Bernardes
jawaban saya perhatikan bahwa Eclipse saya tidak menunjukkan apa yang seharusnya dan penggunaan peek () membantu menampilkan hasil.
result
variabel sementara Anda sebagaiInteger
. Yang sederhanaint
harus dilakukan juga jika Anda melakukanmap
pingint
keint
...