code: @SuppressWarnings("unused")
      public final boolean forEachWhile(BiPredicate<? super K, ? super V> predicate) {
          Objects.requireNonNull(predicate);
          boolean interrupted = false;
          int mc = this.modCount;
          Segment<K, V> segment;
          for (long segmentIndex = 0; segmentIndex >= 0;
               segmentIndex = nextSegmentIndex(segmentIndex, segment)) {
              if (!(segment = segment(segmentIndex)).forEachWhile(predicate)) {
                  interrupted = true;
                  break;
              }
          }
          if (mc != modCount)
              throw new ConcurrentModificationException();
          return !interrupted;
      }
docs: Checks the given {@code predicate} on each entry in this map until all entries have been
  processed or the predicate returns false for some entry, or throws an Exception. Exceptions
  thrown by the predicate are relayed to the caller.
  
  <p>The entries will be processed in the same order as the entry set iterator, and {@link
  #forEach(BiConsumer)} order.
  
  <p>If the map is empty, this method returns {@code true} immediately.
  
  @param predicate the predicate to be checked for each entry
  @return {@code true} if the predicate returned {@code true} for all entries of the map,
  {@code false} if it returned {@code false} for some entry
  @throws NullPointerException if the given {@code predicate} is {@code null}
  @throws ConcurrentModificationException if any structural modification of the map (new entry
  insertion or an entry removal) is detected during iteration
  @see #forEach(BiConsumer)