Observable Chain Dies и Intellij Lags/Freezes

У меня есть этот простой Observable, который называется:

Map<Integer, List<Long>> localLookup = new HashMap<>();
return Observable.from(userList)
                 .filter(lookupId -> userLookup.containsKey(lookupId))
                 .map(lookupId -> {
                    int userId = userLookup.get(lookupId);
                    if (localLookup.containsKey(userId)) {
                        localLookup.get(userId).add(Long.valueOf(lookupId));
                    } else {
                        localLookup.put(userId, Arrays.asList(Long.valueOf(lookupId)));
                    }
                    return lookupId;
                }).toList().map(results -> {
                      return localLookup;
                });

UserList представляет собой List<String> размером 18000. userLookup — это уже существующая карта, и я создаю новое сопоставление на основе того, что находится в userLookup.

Однако по какой-то причине между десятой и двадцатой итерацией фильтра/карты выполнение наблюдаемых останавливается, и IntelliJ начинает отставать, как сумасшедший, и никогда не восстанавливается, пока я не перезапущу. Моя память настроена довольно высоко:

-Xms2048m
-Xmx4096m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops

И мой индикатор кучи не взорвался: введите здесь описание изображения

Единственным другим индикатором является то, что у меня есть очень длинная строка, напечатанная на консоли списка идентификаторов пользователей. Любые идеи относительно того, почему это наблюдаемое дергается?


person j will    schedule 15.06.2017    source источник
comment
/simple/complex/, если бы это было так просто, вы могли бы очень просто рассуждать о том, почему это не работает...   -  person    schedule 15.06.2017


Ответы (1)


Arrays.asList возвращает неизменяемый список, поэтому при попытке добавить дополнительный идентификатор пользователя вы получите UnsupportedOperationException. Вся обработка исключений, вероятно, вызывает значительное замедление.

Вместо использования Arrays.asList создайте new ArrayList, а затем добавьте исходный lookupId.

person jlars62    schedule 15.06.2017