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) {