При переводе Java в код Kotlin я обнаружил следующее:
List<Content> getContent(List<Node> nodes, Map<String, Content> content) {
List<Content> result = new ArrayList<>(nodes.size());
for (Node node : nodes) {
Content content = content.get(node.getId());
if (content == null) {
logger.atSevere().log("Content %s was not found", node.getId());
continue;
}
result.add(content);
}
return result;
}
В Kotlin это может быть легко переведено, если мы отбросим вызов логгера:
fun getContent(items: List<Node>, content: Map<String, Content): List<Content> {
val contentIds = items.mapNotNull { it.id }
return contentIds.mapNotNull { contentMap[it] }
}
Я думаю, что здесь может быть неплохо построить секвенсор. Также возможно разделить contentIds
на две отдельные коллекции, одна из которых состоит из contentIds
, которых не было в contentMap
, а другая состоит из Content
, успешно сопоставленных. Бьюсь об заклад, есть также лучший способ получить набор элементов на карте из набора ключей, но я не нашел нужную функцию.