5151 * 
5252 * @param <K> type parameter indicating the type of the data load keys 
5353 * @param <V> type parameter indicating the type of the data that is returned 
54-  * 
5554 * @author <a href="https://github.com/aschrijver/">Arnold Schrijver</a> 
5655 * @author <a href="https://github.com/bbakerman/">Brad Baker</a> 
5756 */ 
@@ -69,7 +68,6 @@ public class DataLoader<K, V> {
6968     * @param batchLoadFunction the batch load function to use 
7069     * @param <K>               the key type 
7170     * @param <V>               the value type 
72-      * 
7371     * @return a new DataLoader 
7472     */ 
7573    public  static  <K , V > DataLoader <K , V > newDataLoader (BatchLoader <K , V > batchLoadFunction ) {
@@ -83,7 +81,6 @@ public static <K, V> DataLoader<K, V> newDataLoader(BatchLoader<K, V> batchLoadF
8381     * @param options           the options to use 
8482     * @param <K>               the key type 
8583     * @param <V>               the value type 
86-      * 
8784     * @return a new DataLoader 
8885     */ 
8986    public  static  <K , V > DataLoader <K , V > newDataLoader (BatchLoader <K , V > batchLoadFunction , DataLoaderOptions  options ) {
@@ -104,7 +101,6 @@ public static <K, V> DataLoader<K, V> newDataLoader(BatchLoader<K, V> batchLoadF
104101     * @param batchLoadFunction the batch load function to use that uses {@link org.dataloader.Try} objects 
105102     * @param <K>               the key type 
106103     * @param <V>               the value type 
107-      * 
108104     * @return a new DataLoader 
109105     */ 
110106    public  static  <K , V > DataLoader <K , V > newDataLoaderWithTry (BatchLoader <K , Try <V >> batchLoadFunction ) {
@@ -120,9 +116,7 @@ public static <K, V> DataLoader<K, V> newDataLoaderWithTry(BatchLoader<K, Try<V>
120116     * @param options           the options to use 
121117     * @param <K>               the key type 
122118     * @param <V>               the value type 
123-      * 
124119     * @return a new DataLoader 
125-      * 
126120     * @see #newDataLoaderWithTry(BatchLoader) 
127121     */ 
128122    @ SuppressWarnings ("unchecked" )
@@ -137,7 +131,6 @@ public static <K, V> DataLoader<K, V> newDataLoaderWithTry(BatchLoader<K, Try<V>
137131     * @param batchLoadFunction the batch load function to use 
138132     * @param <K>               the key type 
139133     * @param <V>               the value type 
140-      * 
141134     * @return a new DataLoader 
142135     */ 
143136    public  static  <K , V > DataLoader <K , V > newDataLoader (BatchLoaderWithContext <K , V > batchLoadFunction ) {
@@ -151,7 +144,6 @@ public static <K, V> DataLoader<K, V> newDataLoader(BatchLoaderWithContext<K, V>
151144     * @param options           the options to use 
152145     * @param <K>               the key type 
153146     * @param <V>               the value type 
154-      * 
155147     * @return a new DataLoader 
156148     */ 
157149    public  static  <K , V > DataLoader <K , V > newDataLoader (BatchLoaderWithContext <K , V > batchLoadFunction , DataLoaderOptions  options ) {
@@ -172,7 +164,6 @@ public static <K, V> DataLoader<K, V> newDataLoader(BatchLoaderWithContext<K, V>
172164     * @param batchLoadFunction the batch load function to use that uses {@link org.dataloader.Try} objects 
173165     * @param <K>               the key type 
174166     * @param <V>               the value type 
175-      * 
176167     * @return a new DataLoader 
177168     */ 
178169    public  static  <K , V > DataLoader <K , V > newDataLoaderWithTry (BatchLoaderWithContext <K , Try <V >> batchLoadFunction ) {
@@ -188,9 +179,7 @@ public static <K, V> DataLoader<K, V> newDataLoaderWithTry(BatchLoaderWithContex
188179     * @param options           the options to use 
189180     * @param <K>               the key type 
190181     * @param <V>               the value type 
191-      * 
192182     * @return a new DataLoader 
193-      * 
194183     * @see #newDataLoaderWithTry(BatchLoader) 
195184     */ 
196185    public  static  <K , V > DataLoader <K , V > newDataLoaderWithTry (BatchLoaderWithContext <K , Try <V >> batchLoadFunction , DataLoaderOptions  options ) {
@@ -204,7 +193,6 @@ public static <K, V> DataLoader<K, V> newDataLoaderWithTry(BatchLoaderWithContex
204193     * @param batchLoadFunction the batch load function to use 
205194     * @param <K>               the key type 
206195     * @param <V>               the value type 
207-      * 
208196     * @return a new DataLoader 
209197     */ 
210198    public  static  <K , V > DataLoader <K , V > newMappedDataLoader (MappedBatchLoader <K , V > batchLoadFunction ) {
@@ -218,7 +206,6 @@ public static <K, V> DataLoader<K, V> newMappedDataLoader(MappedBatchLoader<K, V
218206     * @param options           the options to use 
219207     * @param <K>               the key type 
220208     * @param <V>               the value type 
221-      * 
222209     * @return a new DataLoader 
223210     */ 
224211    public  static  <K , V > DataLoader <K , V > newMappedDataLoader (MappedBatchLoader <K , V > batchLoadFunction , DataLoaderOptions  options ) {
@@ -232,15 +219,14 @@ public static <K, V> DataLoader<K, V> newMappedDataLoader(MappedBatchLoader<K, V
232219     * <p> 
233220     * If its important you to know the exact status of each item in a batch call and whether it threw exceptions then 
234221     * you can use this form to create the data loader. 
235-      * 
222+      * <p>  
236223     * Using Try objects allows you to capture a value returned or an exception that might 
237224     * have occurred trying to get a value. . 
238225     * <p> 
239226     * 
240227     * @param batchLoadFunction the batch load function to use that uses {@link org.dataloader.Try} objects 
241228     * @param <K>               the key type 
242229     * @param <V>               the value type 
243-      * 
244230     * @return a new DataLoader 
245231     */ 
246232    public  static  <K , V > DataLoader <K , V > newMappedDataLoaderWithTry (MappedBatchLoader <K , Try <V >> batchLoadFunction ) {
@@ -256,9 +242,7 @@ public static <K, V> DataLoader<K, V> newMappedDataLoaderWithTry(MappedBatchLoad
256242     * @param options           the options to use 
257243     * @param <K>               the key type 
258244     * @param <V>               the value type 
259-      * 
260245     * @return a new DataLoader 
261-      * 
262246     * @see #newDataLoaderWithTry(BatchLoader) 
263247     */ 
264248    @ SuppressWarnings ("unchecked" )
@@ -273,7 +257,6 @@ public static <K, V> DataLoader<K, V> newMappedDataLoaderWithTry(MappedBatchLoad
273257     * @param batchLoadFunction the batch load function to use 
274258     * @param <K>               the key type 
275259     * @param <V>               the value type 
276-      * 
277260     * @return a new DataLoader 
278261     */ 
279262    public  static  <K , V > DataLoader <K , V > newMappedDataLoader (MappedBatchLoaderWithContext <K , V > batchLoadFunction ) {
@@ -287,7 +270,6 @@ public static <K, V> DataLoader<K, V> newMappedDataLoader(MappedBatchLoaderWithC
287270     * @param options           the options to use 
288271     * @param <K>               the key type 
289272     * @param <V>               the value type 
290-      * 
291273     * @return a new DataLoader 
292274     */ 
293275    public  static  <K , V > DataLoader <K , V > newMappedDataLoader (MappedBatchLoaderWithContext <K , V > batchLoadFunction , DataLoaderOptions  options ) {
@@ -308,7 +290,6 @@ public static <K, V> DataLoader<K, V> newMappedDataLoader(MappedBatchLoaderWithC
308290     * @param batchLoadFunction the batch load function to use that uses {@link org.dataloader.Try} objects 
309291     * @param <K>               the key type 
310292     * @param <V>               the value type 
311-      * 
312293     * @return a new DataLoader 
313294     */ 
314295    public  static  <K , V > DataLoader <K , V > newMappedDataLoaderWithTry (MappedBatchLoaderWithContext <K , Try <V >> batchLoadFunction ) {
@@ -324,9 +305,7 @@ public static <K, V> DataLoader<K, V> newMappedDataLoaderWithTry(MappedBatchLoad
324305     * @param options           the options to use 
325306     * @param <K>               the key type 
326307     * @param <V>               the value type 
327-      * 
328308     * @return a new DataLoader 
329-      * 
330309     * @see #newDataLoaderWithTry(BatchLoader) 
331310     */ 
332311    @ SuppressWarnings ("unchecked" )
@@ -375,37 +354,57 @@ private CacheMap<Object, CompletableFuture<V>> determineCacheMap(DataLoaderOptio
375354     * and returned from cache). 
376355     * 
377356     * @param key the key to load 
378-      * 
379357     * @return the future of the value 
380358     */ 
381359    public  CompletableFuture <V > load (K  key ) {
382360        return  load (key , null );
383361    }
384362
363+     /** 
364+      * This will return an optional promise to a value previously loaded via {@link #load(Object)} call or empty if not call has been made for that key. 
365+      * <p> 
366+      * If you do get a present CompletableFuture it does not mean it has been dispatched and completed yet.  It just means 
367+      * its at least pending and in cache.  Of course if caching is disabled there will never be a present Optional returned. 
368+      * <p> 
369+      * NOTE : This will NOT cause a data load to happen.  You must called {@link #load(Object)} for that. 
370+      * 
371+      * @param key the key to check 
372+      * @return an Optional to the future of the value 
373+      */ 
385374    public  Optional <CompletableFuture <V >> getIfPresent (K  key ) {
386375        return  helper .getIfPresent (key );
387376    }
388377
378+     /** 
379+      * This will return an optional promise to a value previously loaded via {@link #load(Object)} call that has in fact been completed or empty 
380+      * if no call has been made for that key or the promise has not completed yet. 
381+      * <p> 
382+      * If you do get a present CompletableFuture it means it has been dispatched and completed. 
383+      * <p> 
384+      * NOTE : This will NOT cause a data load to happen.  You must called {@link #load(Object)} for that. 
385+      * 
386+      * @param key the key to check 
387+      * @return an Optional to the future of the value 
388+      */ 
389389    public  Optional <CompletableFuture <V >> getIfCompleted (K  key ) {
390390        return  helper .getIfCompleted (key );
391391    }
392392
393393
394-         /** 
395-          * Requests to load the data with the specified key asynchronously, and returns a future of the resulting value. 
396-          * <p> 
397-          * If batching is enabled (the default), you'll have to call {@link DataLoader#dispatch()} at a later stage to 
398-          * start batch execution. If you forget this call the future will never be completed (unless already completed, 
399-          * and returned from cache). 
400-          * <p> 
401-          * The key context object may be useful in the batch loader interfaces such as {@link org.dataloader.BatchLoaderWithContext} or 
402-          * {@link org.dataloader.MappedBatchLoaderWithContext} to help retrieve data. 
403-          * 
404-          * @param key        the key to load 
405-          * @param keyContext a context object that is specific to this key 
406-          * 
407-          * @return the future of the value 
408-          */ 
394+     /** 
395+      * Requests to load the data with the specified key asynchronously, and returns a future of the resulting value. 
396+      * <p> 
397+      * If batching is enabled (the default), you'll have to call {@link DataLoader#dispatch()} at a later stage to 
398+      * start batch execution. If you forget this call the future will never be completed (unless already completed, 
399+      * and returned from cache). 
400+      * <p> 
401+      * The key context object may be useful in the batch loader interfaces such as {@link org.dataloader.BatchLoaderWithContext} or 
402+      * {@link org.dataloader.MappedBatchLoaderWithContext} to help retrieve data. 
403+      * 
404+      * @param key        the key to load 
405+      * @param keyContext a context object that is specific to this key 
406+      * @return the future of the value 
407+      */ 
409408    public  CompletableFuture <V > load (K  key , Object  keyContext ) {
410409        return  helper .load (key , keyContext );
411410    }
@@ -419,7 +418,6 @@ public CompletableFuture<V> load(K key, Object keyContext) {
419418     * and returned from cache). 
420419     * 
421420     * @param keys the list of keys to load 
422-      * 
423421     * @return the composite future of the list of values 
424422     */ 
425423    public  CompletableFuture <List <V >> loadMany (List <K > keys ) {
@@ -439,7 +437,6 @@ public CompletableFuture<List<V>> loadMany(List<K> keys) {
439437     * 
440438     * @param keys        the list of keys to load 
441439     * @param keyContexts the list of key calling context objects 
442-      * 
443440     * @return the composite future of the list of values 
444441     */ 
445442    public  CompletableFuture <List <V >> loadMany (List <K > keys , List <Object > keyContexts ) {
@@ -505,7 +502,6 @@ public int dispatchDepth() {
505502     * on the next load request. 
506503     * 
507504     * @param key the key to remove 
508-      * 
509505     * @return the data loader for fluent coding 
510506     */ 
511507    public  DataLoader <K , V > clear (K  key ) {
@@ -533,7 +529,6 @@ public DataLoader<K, V> clearAll() {
533529     * 
534530     * @param key   the key 
535531     * @param value the value 
536-      * 
537532     * @return the data loader for fluent coding 
538533     */ 
539534    public  DataLoader <K , V > prime (K  key , V  value ) {
@@ -551,7 +546,6 @@ public DataLoader<K, V> prime(K key, V value) {
551546     * 
552547     * @param key   the key 
553548     * @param error the exception to prime instead of a value 
554-      * 
555549     * @return the data loader for fluent coding 
556550     */ 
557551    public  DataLoader <K , V > prime (K  key , Exception  error ) {
@@ -569,7 +563,6 @@ public DataLoader<K, V> prime(K key, Exception error) {
569563     * If no cache key function is present in {@link DataLoaderOptions}, then the returned value equals the input key. 
570564     * 
571565     * @param key the input key 
572-      * 
573566     * @return the cache key after the input is transformed with the cache key function 
574567     */ 
575568    public  Object  getCacheKey (K  key ) {
0 commit comments