final Map buckets = bucket(strings, new Indexer() { public int index(Object value) { return ((String)value).charAt(index);
final Map buckets = bucket(strings, new Transformer() { public Object transform(Object value) { return new Integer(((String)value).charAt(index));
    private void stringSwitchHelper(List strings,                                    final StringSwitchCallback callback,                                    final Label def,                                    final Label end,                                    final int index) throws Exception {        final int len = ((String)strings.get(0)).length();        final Map buckets = bucket(strings, new Indexer() {            public int index(Object value) {                return ((String)value).charAt(index);            }        });        dup();        push(index);        invoke(MethodConstants.STRING_CHAR_AT);        process_switch(getSwitchKeys(buckets), new ProcessSwitchCallback() {                public void processCase(int key, Label ignore_end) throws Exception {                    List bucket = (List)buckets.get(new Integer(key));                    if (index + 1 == len) {                        pop();                        callback.processCase((String)bucket.get(0), end);                    } else {                        stringSwitchHelper(bucket, callback, def, end, index + 1);                    }                }                public void processDefault() {                    goTo(def);                }            });    }        