#java #hashmap
#java #hashmap
Вопрос:
У меня странная проблема с этими строками кода (цикл for предназначен только для моей отладки):
protected final List<Long> extractIdFromResult(Map<String, Object> pResult, String pKey) {
for (String key : pResult.keySet()) {
Object o = pResult.get(key);
if (null == o){
System.out.println("is null");
}
}
return new SqlArrayExtractor<Long>(pResult.get(pKey)).extract(new Transformer() {
@Override
public Long transform(Object pInput) {
return Long.valueOf(((BigDecimal) pInput).longValue());
}
});
}
метод вызывается для извлечения идентификаторов (Longs) из сохраненной процедуры.
is null
никогда не записывается в консоль, и я никогда не ввожу, if (null == o){
потому что o
не равно null.
Тем не менее, если я ввожу public Long transform(Object pInput)
pInput
, всегда равно нулю!
Как это может произойти? Эта строка работает довольно хорошо: Object o = pResult.get(key);
Спасибо за вашу помощь
Стефан
Комментарии:
1. Что такое
SqlArrayExtractor
? Ваш собственный класс или из какой-либо библиотеки?2. Вы уверены, что значение
pKey
содержится вpResult.keySet()
?3. хммм. собственный класс … 🙂 спасибо за подсказку
Ответ №1:
Есть вероятность, что pKey недоступен в map, поэтому запустите следующий код, чтобы проверить, так ли это. Цикл никогда не выдаст значение null, потому что вы повторяете набор ключей, который вы получили с карты.
protected final List<Long> extractIdFromResult(Map<String, Object> pResult, String pKey) {
System.out.println("is pKey available in map " pResult.get(pKey));
// There is a chance that the pKey can be something which is not available in the map.
return new SqlArrayExtractor<Long>(pResult.get(pKey)).extract(new Transformer() {
@Override
public Long transform(Object pInput) {
return Long.valueOf(((BigDecimal) pInput).longValue());
}
});
}
Комментарии:
1. нет, это не так, он проверяет наличие ключа, а не pKey. Объект o = pResult.get(ключ); который находится в наборе ключей maps
2. Затем вам нужно будет показать нам код SqlArrayExtractor.