public MagicList<E> distinct(String expression) {
        MagicList<E> result = new MagicList<E>();
        Set<Object> set = new HashSet<Object>();
        try {
            final Object ognlTree = Ognl.parseExpression(expression);
            for (int i = 0; i < this.size(); i++) {
                E object = this.get(i);
                Object target = Ognl.getValue(ognlTree, object);
                if (!set.contains(target)) {
                    set.add(target);
                    result.add(object);
                }
            }
        } catch (OgnlException e) {
            throw new RuntimeException(e);
        }
        return result;
    }