code: public Subscription addSubscriber(Function<? super E, Subscription> subscriber) {
          Objects.requireNonNull(subscriber);
          subscribers.add(subscriber);
  
          List<E> keys = new ArrayList<>(map.keySet());
          keys.forEach(key -> {
              List<Subscription> otherSubs = map.get(key);
              Subscription sub = subscriber.apply(key);
              otherSubs.add(sub);
              map.put(key, otherSubs);
          });
  
          return () -> removeSubscriber(subscriber);
      }
docs: Subscribes to all current and future elements' internal changes in this set until either they are removed
  or this subscriber is removed by calling {@link Subscription#unsubscribe() unsubscribe} on the function's
  returned {@link Subscription}.