public static void iterate()

in facebook-share/src/main/java/com/facebook/internal/CollectionMapper.java [34:87]


  public static <T> void iterate(
      final Collection<T> collection,
      final ValueMapper valueMapper,
      final OnMapperCompleteListener onMapperCompleteListener) {
    final Mutable<Boolean> didReturnError = new Mutable<Boolean>(false);
    final Mutable<Integer> pendingJobCount = new Mutable<Integer>(1);
    final OnMapperCompleteListener jobCompleteListener =
        new OnMapperCompleteListener() {
          @Override
          public void onComplete() {
            if (didReturnError.value) {
              return;
            }
            if (--pendingJobCount.value == 0) {
              onMapperCompleteListener.onComplete();
            }
          }

          @Override
          public void onError(FacebookException exception) {
            if (didReturnError.value) {
              return;
            }
            didReturnError.value = true;
            onMapperCompleteListener.onError(exception);
          }
        };

    Iterator<T> keyIterator = collection.keyIterator();
    List<T> keys = new LinkedList<>();
    while (keyIterator.hasNext()) {
      keys.add(keyIterator.next());
    }

    for (final T key : keys) {
      final Object value = collection.get(key);
      final OnMapValueCompleteListener onMapValueCompleteListener =
          new OnMapValueCompleteListener() {
            @Override
            public void onComplete(Object mappedValue) {
              collection.set(key, mappedValue, jobCompleteListener);
              jobCompleteListener.onComplete();
            }

            @Override
            public void onError(FacebookException exception) {
              jobCompleteListener.onError(exception);
            }
          };
      pendingJobCount.value++;
      valueMapper.mapValue(value, onMapValueCompleteListener);
    }
    jobCompleteListener.onComplete();
  }