Как насчет:
val unionList = (mapA.asSequence() + mapB.asSequence())
.distinct()
.groupBy({ it.key }, { it.value })
.mapValues { (_, values) -> values.joinToString(",") }
Результат:
{Emergency=112,911, Fire department=101, Police=102}
Это будет:
Sequence
ключей обеих карт. пары значений Map<String, List<String>
) Map<String, String>
) Моим фаворитом, безусловно, является JProfiler. Я не понял это до сейчас (потому что я всегда использую интерактивный профильный GUI), но это действительно на самом деле поддерживает офлайн профилирование, точно как Вы описанный.
Несколько других замечательных функций:
Это представляет все Ваши SQL-операторы, таким образом, Вы видите, какие запросы DB замедляют Вас.
Это отслеживает, которых методы (в который классы и пакеты) выделяют большую часть памяти, для который типы объектов и массивов и долговечности тех объектов. Так, при утечке памяти легко разыскать, какие типы экземпляров класса переживают свою полноценность, и найти методы, где те объекты были первоначально выделены (и кто держит ссылки, которые поддерживают объекты).
Можно отслеживать рост VM, контролируя частоту GC полные наборы, и определяя, сколько объектов (которых вводят) было освобождено во время каждого цикла сбора.
И конечно, Вы получаете иерархическую разбивку всех вызовов метода, с количеством вызовов и имеете в виду время выполнения (эксклюзивный или содержащий) целого стека вызовов. Можно также просмотреть эту иерархию с точки зрения "худшего узкого места" функции, заказанные или ко времени выполнения или к выделению памяти.
Для меня JProfiler является одним из самых важных инструментов в моем процессе разработки (второй только к Eclipse).
Также: существует бесплатная 10-дневная пробная версия. Загрузите его и проверьте его. И, btw, я не аффилирован с компанией или чем-либо. Я только что был счастливым клиентом в течение прошлых пяти или шести лет.
Я был очень счастлив с Профилировщиком NetBeans; я полагаю, что это также удовлетворяет все Ваши требования.
Я не знаком с офлайновым профилированием. Разве это не то, для чего hprof?. Иначе у меня был очень хороший опыт с профилировщиком YourKit.
Вы могли попробовать анализатор во время выполнения, который идет с Управлением полетом JRockit. Это производит файлы записи, которые можно открыть в GUI позже. Издержки являются очень низкими, обычно меньше чем 1-2%, и это очень просто в использовании.
Можно запустить запись с командной строки как это:
JROCKIT_HOME\bin> Java-XXjra:recordingtime=2000s, filename=myrecording.jra, sampletime=1
и если JVM выходит, прежде чем запись закончилась, профильные данные будут сброшены к диску.