2011-04-05 63 views
0

我仍然在加快groovy必须提供的快捷方式。Groovy - 将字符串拆分为FIFO队列

是否有一个更短的'更groovier'的方式来实现将字符串分割为FIFO队列?

这是我目前有:

String source 
Queue<Character> chars = new LinkedList<Character>(Arrays.asList(source.value)) 

回答

1

这难道不是工作?

Queue<Character> chars = source.value as Queue<Character> 

(假设source.valueString

其实,我只是尝试这样做:

source = [ value:'hello' ] 
Queue<Character> queue = source.value as Queue<Character> 
println queue.class.name 

并打印出

String_delegateProxy 

在哪里我本来期望java.util.Queue

最好工作示例我可以想出的是:

Queue<Character> queue = new LinkedList<Character>(source.value as List) 

作为LinkedList实现Queue接口

+0

不幸的是,没有。我得到这个:'org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法实例化:java.util.Queue的实例。 ' – 2011-04-05 13:39:58

+0

什么版本的Groovy?似乎在webconsole上工作......并在我的机器上使用1.7.10 – 2011-04-05 13:41:03

+0

啊,也许我需要更新。我使用1.7.7。我会尝试与1.7.10 – 2011-04-05 13:43:53

1

这就够了(字符串 - >的char [] - >链表)

Queue<Character> chars = '1234'.chars as LinkedList 
assert '1' == chars.remove() 
assert '2' == chars.remove() 
assert '3' == chars.remove() 
assert '4' == chars.remove() 

关于以前的评论的一件事。

将任何东西铸造到接口在较新版本的groovy中创建代理(1.7+或许不确定)。至少除了常用的'as List'或'Set'转换之外的任何东西。

此代理将接口方法委托给铸造对象,调用方式如InvokerHelper.invokeMethod(delegate, 'remove', args)。见DGM#asType(Object, Class<T>)groovy.util.ProxyGenerator

String_delegateProxy tim got是这些代理之一,通过将字符串投射到队列创建。