Projemizde java 8'e geçiş yapıyoruz ve yeni özelliklerini test ediyoruz.
Projemde ben filtrelemek ve kullanarak bazı koleksiyonları dönüştürmek için Guava yüklemleri ve işlevleri kullanıyorum Collections2.transformve Collections2.filter.
Bu geçişte örneğin guava kodunu java 8'e değiştirmem gerekiyor. Yani, yaptığım değişiklikler şu türden:
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);
To ...
List<Integer> result2 = naturals.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
Guava kullanarak, her dönüştürme işleminde hata ayıklayabildiğim için kodda hata ayıklarken çok rahattım, ancak mesela benim endişem nasıl hata ayıklayacağımdır .map(n -> n*2).
Hata ayıklayıcıyı kullanarak aşağıdaki gibi bazı kodlar görebilirim:
@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];
}
Ama kodda hata ayıklamak Guava kadar doğru değil, aslında n * 2dönüşümü bulamadım .
Bu dönüşümü görmenin bir yolu veya bu kodda hata ayıklamanın kolay bir yolu var mı?
DÜZENLEME: Farklı yorumlardan cevap ekledim ve cevapları gönderdim
HolgerSoruma cevap veren yorum sayesinde , lambda bloğuna sahip olma yaklaşımı, dönüşüm sürecini görmeme ve lambda gövdesi içinde olanları ayıklamama izin verdi:
.map(
n -> {
Integer nr = n * 2;
return nr;
}
)
Stuart MarksYöntem referanslarına sahip olma yaklaşımı sayesinde , dönüşüm sürecindeki hataları da ayıklamamı sağladı:
static int timesTwo(int n) {
Integer result = n * 2;
return result;
}
...
List<Integer> result2 = naturals.stream()
.map(Java8Test::timesTwo)
.collect(Collectors.toList());
...
Marlon BernardesCevap sayesinde Eclipse'imin ne yapması gerektiğini göstermediğini ve peek () kullanımının sonuçların görüntülenmesine yardımcı olduğunu fark ettim.








resultdeğişkeninizi olarak bildirmenize gerek yokturInteger. Basitinteğer yanı yapmalıyımmapping birintbir etmekint...