हमारी परियोजना में हम java 8 की ओर पलायन कर रहे हैं और हम इसकी नई विशेषताओं का परीक्षण कर रहे हैं।
अपने प्रोजेक्ट पर मैं अमरूद विधेय और कार्यों का उपयोग कर रहा है और फिल्टर होता का उपयोग कर कुछ संग्रह को बदलने के लिए Collections2.transform
और Collections2.filter
।
इस माइग्रेशन पर मुझे उदाहरण के लिए अमरूद कोड को जावा 8 परिवर्तन के लिए बदलना होगा। इसलिए, मैं जो बदलाव कर रहा हूं वह इस प्रकार है:
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);
सेवा...
List<Integer> result2 = naturals.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
अमरुद का उपयोग करते हुए मैं कोड को डिबग करने में बहुत असहज था क्योंकि मैं प्रत्येक परिवर्तन प्रक्रिया को डिबग कर सकता था लेकिन मेरी चिंता यह है कि उदाहरण के लिए डिबग कैसे किया जाए .map(n -> n*2)
।
डीबगर का उपयोग करके मैं कुछ कोड देख सकता हूं जैसे:
@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];
}
लेकिन यह कोड को डिबग करने के लिए अमरूद जितना कठोर नहीं है, वास्तव में मुझे n * 2
परिवर्तन नहीं मिला ।
क्या यह परिवर्तन देखने का कोई तरीका है या इस कोड को आसान डीबग करने का एक तरीका है?
संपादित करें: मैंने विभिन्न टिप्पणियों और पोस्ट किए गए उत्तरों से उत्तर जोड़ा है
Holger
मेरे सवाल का जवाब देने वाली टिप्पणी के लिए धन्यवाद , लैम्ब्डा ब्लॉक होने के दृष्टिकोण ने मुझे परिवर्तन प्रक्रिया को देखने की अनुमति दी और लैम्बडा शरीर के अंदर क्या हुआ, इस पर डिबग किया:
.map(
n -> {
Integer nr = n * 2;
return nr;
}
)
Stuart Marks
विधि संदर्भ होने के दृष्टिकोण के लिए धन्यवाद भी मुझे परिवर्तन प्रक्रिया को डीबग करने की अनुमति देता है:
static int timesTwo(int n) {
Integer result = n * 2;
return result;
}
...
List<Integer> result2 = naturals.stream()
.map(Java8Test::timesTwo)
.collect(Collectors.toList());
...
Marlon Bernardes
जवाब देने के लिए धन्यवाद मैंने देखा कि मेरा ग्रहण यह नहीं दिखाता है कि इसे क्या करना चाहिए और परिणाम प्रदर्शित करने के लिए झांकना () का उपयोग करने में मदद मिली।
result
चर को घोषित करने की आवश्यकता नहीं हैInteger
। एक साधारण केint
रूप में अच्छी तरह से करना चाहिए यदि आप एक …map
int
int