স্ট্যাকওয়াকার API একটি প্রোগ্রাম কার্যকর করার সময় স্ট্যাক ট্রেসে তথ্যের একটি প্রবাহ প্রদান করে। এই API-এর একটি ভার্চুয়াল মেশিন প্রয়োজন৷ সম্পূর্ণ স্ট্যাকের একটি স্ন্যাপশট ক্যাপচার করতে এবং ফিল্টারিংয়ের উদ্দেশ্যে উপাদানগুলির একটি অ্যারে প্রদান করে। আমাদের ওয়াক() ব্যবহার করে স্ট্যাক ফ্রেমগুলি এড়িয়ে যেতে, ড্রপ করতে এবং সীমাবদ্ধ করতে হবে পদ্ধতি এছাড়াও আমরা প্রথম ম্যাচিং ফ্রেম পাওয়ার জন্য ক্লাস অনুসারে একটি স্ট্যাক ফ্রেম ফিল্টার করতে পারি এবং ফিল্টার() ব্যবহার করে সমস্ত ম্যাচিং ফ্রেম। পদ্ধতি।
নিচের উদাহরণে, আমরা StackWalker API ব্যবহার করে একটি স্ট্যাক ফ্রেম ফিল্টার করতে পারি।
উদাহরণ
import java.lang.StackWalker.StackFrame; import java.util.*; import java.util.stream.*; public class StackWalkerFilterTest { public static void main(String args[]) { final List<Class> filterClasses = new ArrayList<>(); filterClasses.add(StackWalkerFilterTest.class); System.out.println("--- filter Frame by Class >> get first matching frame ---"); Optional<StackFrame> frameByClass = findFrameByClass(filterClasses); System.out.println(frameByClass.toString()); System.out.println("--- filter Frame by Class >> get all matching frames ---"); List<StackFrame> framesByClass = findAllFramesByClass(filterClasses); System.out.println(framesByClass); } private static Optional<StackFrame> findFrameByClass(List<Class> filterClasses) { return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE) .walk(s -> s.filter(f -> filterClasses.contains(f.getDeclaringClass())).findFirst()); } private static List<StackFrame> findAllFramesByClass(List<Class> filterClasses) { return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk( s -> s.filter(f -> filterClasses.contains(f.getDeclaringClass())).collect(Collectors.toList())); } }
আউটপুট
--- filter Frame by Class >> get first matching frame --- Optional[StackWalkerTest.findFrameByClass(StackWalkerTest.java:20)] --- filter Frame by Class >> get all matching frames --- [StackWalkerTest.findAllFramesByClass(StackWalkerTest.java:23), StackWalkerTest2.main(StackWalkerTest.java:15)]