আমাদের প্রকল্পে আমরা জাভা 8 এ স্থানান্তরিত হচ্ছি এবং আমরা এর নতুন বৈশিষ্ট্যগুলি পরীক্ষা করছি।
আমার প্রকল্প আমি পেয়ারা predicates এবং ফাংশন ব্যবহার করছি ফিল্টার করুন এবং ব্যবহার করে কিছু সংগ্রহ রুপান্তর 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
...