Как блокировать/дразнить JDBC ResultSet для работы и с Java 5 и 6?

Чтобы просто вернуть список, содержащий наиболее распространенные слова:

from collections import Counter
words=["i", "love", "you", "i", "you", "a", "are", "you", "you", "fine", "green"]
most_common_words= [word for word, word_count in Counter(words).most_common(3)]
print most_common_words

это печатает:

['you', 'i', 'a']

3 в «most_common(3)», указывает количество элементов для Распечатать. Counter(words).most_common() возвращает список кортежей, каждый из которых имеет слово в качестве первого члена и частоту в качестве второго члена. Кортежи упорядочены по частоте слова.

`most_common = [item for item in Counter(words).most_common()]
print(str(most_common))
[('you', 4), ('i', 2), ('a', 1), ('are', 1), ('green', 1), ('love',1), ('fine', 1)]`

«word for word, word_counter in», извлекает только первый член кортежа.

7
задан Touko 28 May 2009 в 07:05
поделиться

2 ответа

Ну, немного подумав, я получил класс-заглушку, как там, и издевался над ним с помощью Mockito как:

public static ResultSet initMock(Object[][] data) throws SQLException {
    final StubResultSetContents contents = new StubResultSetContents(data);
    ResultSet rs = mock(ResultSet.class, RETURNS_SMART_NULLS);
    when(rs.getObject(anyInt())).thenAnswer(new Answer<Object>() {
        public Object answer(InvocationOnMock invocation) throws Throwable {
            return contents.getObject(getIntArgument(invocation));
        }
    });
    // a bunch of similar when(...).thenAnswer(...) constructs...
}

(класс-заглушка в StubResultSetContents). Если у кого-то есть другие идеи, смело отвечайте =)

3
ответ дан 7 December 2019 в 16:45
поделиться

У меня была такая же проблема, и я решил ее с помощью реализации прокси. Похоже, он работает неплохо.

public class TestResultSet implements InvocationHandler {
    public static ResultSet createProxy(HashMap<Object, Object>[] rows) {
        return (ResultSet) Proxy.newProxyInstance(ResultSet.class.getClassLoader(),
                                             new Class[] { ResultSet.class },
                                             new TestResultSet(rows));
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // Find the equivalent method in the proxy class.
        Method m = TestResultSet.class.getMethod(method.getName(), method.getParameterTypes());
        if(m == null) {
            throw new SQLException("Unsupported method " + method.getName());
        }

        return m.invoke(this, args);
    }

    // Method implementations follow here (only one supplied as an example)

    public boolean isFirst() throws SQLException {
        return index ==0;
    }

}
0
ответ дан 7 December 2019 в 16:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: