Так что у меня возникла проблема с таблицей Guava TreeBasedTable (если вы незнакомы, это дерево, которое обращается к своим элементам на основе пары ключей), которое на прошлой неделе было медвежьим для выяснения. Я сделаю все возможное, чтобы объяснить, удалив лишний код:
TreeBasedTable<RowValue, Data, Result> results = TreeBasedTable.create();
for (Data d : data.getData()) {
for (Operation o: data.getOperations()) {
Result r = o.calculate(...);
results.put(r.rowValue, d, r);
}
}
По сути, я перебираю некоторые данные, которые у меня есть, делаю некоторые вычисления и помещаю результаты в таблицу. Что странно, когда я пытаюсь получить доступ к элементам. Если я просто переберу их следующим образом:
for(Result r : results.values()){
System.out.println(r);
}
все работает нормально. Однако, если я попытаюсь получить к ним доступ следующим образом:
for(RowValue row : results.rowKeySet()){
for(Data d : results.columnKeySet()){
System.out.println(results.get(row, d));
}
}
Первый элемент как-то нулевой. Однако, если дерево имеет размер 1, оно работает нормально. Может быть, здесь что-то происходит с Деревьями, чего я не понимаю? Извините за длинный вопрос, надеюсь, это было понятно.
:: EDIT :: Первое значение, переданное в дерево, всегда ненулевое. Однако, когда дерево достигает размера 3, оно превращается из ненулевого в нулевое. Извините, если не совсем понятно, в чем была моя проблема.
В соответствии с запросом приведен фактический код с актуальными ключами:
public void createResults (параметры параметров, данные MeasuredData, методы ArrayList) {
private TreeBasedTable<MethodDescriptor, Compound, Result> results = TreeBasedTable.create();
for (Compound c : data.getCompounds()) {
for (Method method : methods) {
ArrayList<Result> calcResults = method.calculate(c, options);
for (Result r : calcResults) {
results.put(r.getMethod(), c, r);
}
}
}
Итак, я провел ряд вычислений для ряда соединений, каждое из которых может дать несколько результатов. Можно ли как-то это прояснить?