Am 20.09.2013 20:46, schrieb Mandy Chung:
[...]
Exposing a StackStream API means that you need to eagerly walk the stack
and copy the stack frames to it before it returns. I agree it is a much
more flexible API. On the other hand, stack walking is sequential and
ordered and a stack stream will be traversed as in an iterator.
not the StackStream API, I did mean a Stream as in
http://download.java.net/lambda/b78/docs/api/java/util/stream/Stream.html But
I must say, I did not realize Stream has so little to offer in terms of
default implementations. I am not saying using this class is a good
idea, but if you already go on lambdas, then this should be at least
something to consider... and to underline it: Stream does not require
you to eagerly read all values
What about a findCaller method that takes a parameter to indicate how
many times you skip over the matching elements before applying the
function:
Thread.findCaller(info -> {return
!haveToSkip(info.getDeclaringClass());},
nonSkippedFramesDepth,
StackFrameInfo::getDeclaringClass());
just to show you how this could work with the Stream
Thread.getStackStream().
filter(info -> {return !haveToSkip(info.getDeclaringClass());}.
subStream(nonSkippedFramesDepth).
map(StackFrameInfo::getDeclaringClass).findFirst()
I am looking at those things since only recently, so there is surely a
better way, but have an impression it should be enough. Especially I
show this to you, so you can see that with a Stream no new method is needed.
bye Jochen
--
Jochen "blackdrag" Theodorou - Groovy Project Tech Lead
blog: http://blackdragsview.blogspot.com/
german groovy discussion newsgroup: de.comp.lang.misc
For Groovy programming sources visit http://groovy-lang.org