You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2021/06/29 13:40:31 UTC

[commons-pool] 01/04: Use lambdas.

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-pool.git

commit 1cf7035f50220a6bcfe672e3d99cf74188f79db2
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 29 08:15:58 2021 -0400

    Use lambdas.
---
 .../commons/pool2/impl/BaseGenericObjectPool.java  |  3 +-
 .../commons/pool2/impl/GenericKeyedObjectPool.java | 75 ++++++++--------------
 2 files changed, 27 insertions(+), 51 deletions(-)

diff --git a/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
index d2f4171..c0dbe12 100644
--- a/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
@@ -213,8 +213,7 @@ public abstract class BaseGenericObjectPool<T> extends BaseObject {
         @Override
         @SuppressWarnings("rawtypes")
         public boolean equals(final Object other) {
-            return other instanceof IdentityWrapper &&
-                    ((IdentityWrapper) other).instance == instance;
+            return other instanceof IdentityWrapper && ((IdentityWrapper) other).instance == instance;
         }
 
         /**
diff --git a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
index b0570a1..f362a55 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.stream.Collectors;
 
 import org.apache.commons.pool2.DestroyMode;
 import org.apache.commons.pool2.KeyedObjectPool;
@@ -89,6 +90,8 @@ import org.apache.commons.pool2.UsageTracking;
 public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
         implements KeyedObjectPool<K, T>, GenericKeyedObjectPoolMXBean<K>, UsageTracking<T> {
 
+    private static final Integer ZERO = Integer.valueOf(0);
+
     /**
      * Maintains information on the per key queue for a given key.
      *
@@ -512,7 +515,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
     @Override
     String getStatsString() {
         // Simply listed in AB order.
-        return super.getStatsString() + 
+        return super.getStatsString() +
                 String.format(", fairness=%s, maxIdlePerKey%,d, maxTotalPerKey=%,d, minIdlePerKey=%,d, numTotal=%,d",
                         fairness, maxIdlePerKey, maxTotalPerKey, minIdlePerKey, numTotal.get());
     }
@@ -576,7 +579,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
      */
     @Override
     public void clear() {
-        poolMap.keySet().forEach(this::clear);    
+        poolMap.keySet().forEach(this::clear);
     }
 
 
@@ -622,30 +625,24 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
         // build sorted map of idle objects
         final Map<PooledObject<T>, K> map = new TreeMap<>();
 
-        for (final Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) {
-            final K k = entry.getKey();
+        poolMap.entrySet().forEach(entry -> {
             final ObjectDeque<T> deque = entry.getValue();
             // Protect against possible NPE if key has been removed in another
             // thread. Not worth locking the keys while this loop completes.
             if (deque != null) {
-                final LinkedBlockingDeque<PooledObject<T>> idleObjects =
-                        deque.getIdleObjects();
-                for (final PooledObject<T> p : idleObjects) {
-                    // each item into the map using the PooledObject object as the
-                    // key. It then gets sorted based on the idle time
-                    map.put(p, k);
-                }
+                // Each item into the map using the PooledObject object as the
+                // key. It then gets sorted based on the idle time
+                deque.getIdleObjects().forEach(p -> map.put(p, entry.getKey()));
             }
-        }
+        });
 
         // Now iterate created map and kill the first 15% plus one to account
         // for zero
         int itemsToRemove = ((int) (map.size() * 0.15)) + 1;
-        final Iterator<Map.Entry<PooledObject<T>, K>> iter =
-                map.entrySet().iterator();
+        final Iterator<Entry<PooledObject<T>, K>> iter = map.entrySet().iterator();
 
         while (iter.hasNext() && itemsToRemove > 0) {
-            final Map.Entry<PooledObject<T>, K> entry = iter.next();
+            final Entry<PooledObject<T>, K> entry = iter.next();
             // kind of backwards on naming.  In the map, each key is the
             // PooledObject because it has the ordering with the timestamp
             // value.  Each value that the key references is the key of the
@@ -1242,19 +1239,14 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
      *         for an object from the pool for each key
      */
     @Override
-    public Map<String,Integer> getNumWaitersByKey() {
-        final Map<String,Integer> result = new HashMap<>();
+    public Map<String, Integer> getNumWaitersByKey() {
+        final Map<String, Integer> result = new HashMap<>();
 
-        for (final Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) {
+        for (final Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) {
             final K k = entry.getKey();
             final ObjectDeque<T> deque = entry.getValue();
             if (deque != null) {
-                if (getBlockWhenExhausted()) {
-                    result.put(k.toString(), Integer.valueOf(
-                            deque.getIdleObjects().getTakeQueueLength()));
-                } else {
-                    result.put(k.toString(), Integer.valueOf(0));
-                }
+                result.put(k.toString(), getBlockWhenExhausted() ? Integer.valueOf(deque.getIdleObjects().getTakeQueueLength()) : ZERO);
             }
         }
         return result;
@@ -1268,16 +1260,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
      *         {@code false}
      */
     private boolean hasBorrowWaiters() {
-        for (final ObjectDeque<T> deque : poolMap.values()) {
-            if (deque != null) {
-                final LinkedBlockingDeque<PooledObject<T>> pool =
-                        deque.getIdleObjects();
-                if (pool.hasTakeWaiters()) {
-                    return true;
-                }
-            }
-        }
-        return false;
+        return poolMap.values().stream().filter(deque -> deque != null && deque.getIdleObjects().hasTakeWaiters()).findFirst().isPresent();
     }
 
     /**
@@ -1347,22 +1330,16 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
      * @return Information grouped by key on all the objects in the pool
      */
     @Override
-    public Map<String,List<DefaultPooledObjectInfo>> listAllObjects() {
-        final Map<String,List<DefaultPooledObjectInfo>> result =
-                new HashMap<>();
+    public Map<String, List<DefaultPooledObjectInfo>> listAllObjects() {
+        final Map<String, List<DefaultPooledObjectInfo>> result = new HashMap<>();
 
-        for (final Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) {
+        poolMap.entrySet().forEach(entry -> {
             final K k = entry.getKey();
             final ObjectDeque<T> deque = entry.getValue();
             if (deque != null) {
-                final List<DefaultPooledObjectInfo> list =
-                        new ArrayList<>();
-                result.put(k.toString(), list);
-                for (final PooledObject<T> p : deque.getAllObjects().values()) {
-                    list.add(new DefaultPooledObjectInfo(p));
-                }
+                result.put(k.toString(), deque.getAllObjects().values().stream().map(DefaultPooledObjectInfo::new).collect(Collectors.toList()));
             }
-        }
+        });
         return result;
     }
 
@@ -1432,9 +1409,9 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
      *
      * @param abandonedConfig The configuration to use to identify abandoned objects
      */
-    @SuppressWarnings("resource") // PrintWriter is managed elsewhere
+    @SuppressWarnings("resource") // The PrintWriter is managed elsewhere
     private void removeAbandoned(final AbandonedConfig abandonedConfig) {
-        for (final Entry<K, GenericKeyedObjectPool<K, T>.ObjectDeque<T>> pool : poolMap.entrySet()) {
+        poolMap.entrySet().forEach(pool -> {
             // Generate a list of abandoned objects to remove
             final ArrayList<PooledObject<T>> remove = createRemoveList(abandonedConfig, pool.getValue().getAllObjects());
             // Now remove the abandoned objects
@@ -1448,7 +1425,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
                     swallowException(e);
                 }
             });
-        }
+        });
     }
 
     /**
@@ -1577,7 +1554,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
         int maxQueueLength = 0;
         LinkedBlockingDeque<PooledObject<T>> mostLoaded = null;
         K loadedKey = null;
-        for (final Map.Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) {
+        for (final Entry<K, GenericKeyedObjectPool<K, T>.ObjectDeque<T>> entry : poolMap.entrySet()) {
             final K k = entry.getKey();
             final ObjectDeque<T> deque = entry.getValue();
             if (deque != null) {