code: public Single<BluetoothGattCharacteristic> getCharacteristic(@NonNull UUID serviceUuid, @NonNull final UUID characteristicUuid) {
          return getService(serviceUuid)
                  .map(new Function<BluetoothGattService, BluetoothGattCharacteristic>() {
                      @Override
                      public BluetoothGattCharacteristic apply(BluetoothGattService bluetoothGattService) {
                          final BluetoothGattCharacteristic characteristic = bluetoothGattService.getCharacteristic(characteristicUuid);
  
                          if (characteristic == null) {
                              throw new BleCharacteristicNotFoundException(characteristicUuid);
                          }
                          return characteristic;
                      }
                  });
      }
docs: Creates an observable emitting {@link BluetoothGattCharacteristic}s with matching service UUID and characteristic UUID.
  The observable completes after first emission.
  
  @param characteristicUuid Characteristic UUID to be found
  @param serviceUuid        Service UUID to search in
  @return Observable emitting matching characteristic or error if hasn't been found.
  @throws BleCharacteristicNotFoundException if characteristic with given UUID hasn't been found.
  @see RxBleDeviceServices#getCharacteristic(UUID)