Class RateLimitingIterator<A>

  • All Implemented Interfaces:
    java.util.Iterator<A>

    public final class RateLimitingIterator<A>
    extends java.lang.Object
    implements java.util.Iterator<A>
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.Iterator<A> asIterator  
      private java.util.Set<Tuple3<java.lang.Long,​java.time.Duration,​Fn0<java.time.Instant>>> rateLimits  
      private java.util.Map<Tuple3<java.lang.Long,​java.time.Duration,​Fn0<java.time.Instant>>,​java.util.List<java.time.Instant>> timeSlicesByRateLimit  
    • Constructor Summary

      Constructors 
      Constructor Description
      RateLimitingIterator​(java.util.Iterator<A> asIterator, java.util.Set<Tuple3<java.lang.Long,​java.time.Duration,​Fn0<java.time.Instant>>> rateLimits)  
    • Field Detail

      • asIterator

        private final java.util.Iterator<A> asIterator
      • rateLimits

        private final java.util.Set<Tuple3<java.lang.Long,​java.time.Duration,​Fn0<java.time.Instant>>> rateLimits
      • timeSlicesByRateLimit

        private final java.util.Map<Tuple3<java.lang.Long,​java.time.Duration,​Fn0<java.time.Instant>>,​java.util.List<java.time.Instant>> timeSlicesByRateLimit
    • Constructor Detail

      • RateLimitingIterator

        public RateLimitingIterator​(java.util.Iterator<A> asIterator,
                                    java.util.Set<Tuple3<java.lang.Long,​java.time.Duration,​Fn0<java.time.Instant>>> rateLimits)
    • Method Detail

      • hasNext

        public boolean hasNext()
        Specified by:
        hasNext in interface java.util.Iterator<A>
      • next

        public A next()
        Specified by:
        next in interface java.util.Iterator<A>
      • awaitNextTimeSlice

        private void awaitNextTimeSlice()
      • awaitNextTimeSliceForRateLimit

        private void awaitNextTimeSliceForRateLimit​(Tuple3<java.lang.Long,​java.time.Duration,​Fn0<java.time.Instant>> rateLimit)
      • rateLimitExhaustedInTimeSlice

        private boolean rateLimitExhaustedInTimeSlice​(Tuple3<java.lang.Long,​java.time.Duration,​Fn0<java.time.Instant>> rateLimit)