class KeyDescriptorFinder {

    public KeyDescriptor find(
            List<KeyDescriptor> keyDescriptors,
            UsageType usageType,
            String entityId) {

        return keyDescriptors.stream()
                .filter(keyDescriptor -> keyDescriptor.getUse().equals(usageType))
                .filter(keyDescriptor -> (keyDescriptor.getKeyInfo().getKeyNames().isEmpty() || entityId == null || keyDescriptor.getKeyInfo().getKeyNames().get(0).getValue().equals(entityId)))
                .findFirst()
                .orElseThrow(() -> throwError(usageType, entityId));
    }

}