code: public ExceptionalStream<T, E> distinctBy(final Try.Function<? super T, ?, ? extends E> keyMapper) {
          checkArgNotNull(keyMapper, "keyMapper");
  
          final Set<Object> set = new HashSet<>();
  
          return filter(new Try.Predicate<T, E>() {
              @Override
              public boolean test(T value) throws E {
                  return set.add(hashKey(keyMapper.apply(value)));
              }
          });
      }
docs: Distinct by the value mapped from <code>keyMapper</code>
  
  @param keyMapper don't change value of the input parameter.
  @return