Отсутствие или недостаточные разрешения при записи в Firestore с использованием поля в правилах доступа

Не уверен, но я думаю, что я могу использовать меньше памяти и получать надежную производительность, делая это char-by-char. Я делал что-то подобное, но в циклах в фоновом режиме, поэтому я сейчас пытаюсь это сделать. У меня был некоторый опыт, когда String.split был более дорогим, чем ожидалось. И я работаю над Android и ожидаю, что GC hiccups станет больше проблемой, чем использовать cpu.

  public static String toCamelCase(String value) {
    StringBuilder sb = new StringBuilder();

    final char delimChar = '_';
    boolean lower = false;
    for (int charInd = 0; charInd < value.length(); ++charInd) {
      final char valueChar = value.charAt(charInd);
      if (valueChar == delimChar) {
        lower = false;
      } else if (lower) {
        sb.append(Character.toLowerCase(valueChar));
      } else {
        sb.append(Character.toUpperCase(valueChar));
        lower = true;
      }
    }

    return sb.toString();
  }

Подсказка, что String.split стоит дорого, заключается в том, что ее ввод является регулярным выражением (не char, как String.indexOf), и он возвращает массив (вместо итератора, потому что цикл использует только одну вещь за раз). Плюс такие случаи, как «AB_AB_AB_AB_AB_AB_AB ...», нарушают эффективность любой массовой копии, а для длинных строк используют на порядок больше памяти, чем входную строку.

В то время как циклирование по символам не имеет канонического случая. Таким образом, накладные расходы на ненужное регулярное выражение и массив кажутся обычно менее предпочтительными (тогда отказ от возможной эффективности массового копирования). Заинтересован услышать мнения / исправления, спасибо.

27
задан Dan McGrath 11 October 2017 в 18:35
поделиться