In this post I am going to explain how to get cms block collection in Magento 2.

1. Using Dependency Injection

Add below code snippet in Block class.

protected $_blockRepository;
protected $_searchCriteriaBuilder;

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Cms\Api\BlockRepositoryInterface $blockRepository,
    \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder,
    array $data = []
) {
    $this->_blockRepository = $blockRepository;
    $this->_searchCriteriaBuilder = $searchCriteriaBuilder;
    parent::__construct($context, $data);
}

// Get CMS Block Collection
public function getCmsBlockCollection() 
{
    $searchCriteria = $this->_searchCriteriaBuilder->create();
    $cmsBlocks = $this->_blockRepository->getList($searchCriteria)->getItems();
    return $cmsBlocks;
}

Add below code snippet in template file.

// Get CMS Block Collection
$cmsBlocks = $block->getCmsBlockCollection();

if ($cmsBlocks && count($cmsBlocks) > 0) {
    foreach ($cmsBlocks as $cmsBlock) {
        echo $cmsBlock->getId() . '<br/>';
        echo $cmsBlock->getTitle() . '<br/>';
    }
}

2. Using Object Manager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$blockRepository = $objectManager->get('Magento\Cms\Api\BlockRepositoryInterface');
$searchCriteriaBuilder = $objectManager->get('Magento\Framework\Api\SearchCriteriaBuilder');

$searchCriteria = $searchCriteriaBuilder->create();
$cmsBlocks = $blockRepository->getList($searchCriteria)->getItems();

if ($cmsBlocks && count($cmsBlocks) > 0) {
    foreach ($cmsBlocks as $cmsBlock) {
        echo $cmsBlock->getId() . '<br/>';
        echo $cmsBlock->getTitle() . '<br/>';
    }
}

Thats it. Enjoy Magento 2!!