You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tv...@apache.org on 2018/12/10 20:58:02 UTC
svn commit: r1848636 - in
/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs:
engine/match/KeyMatcherPatternImpl.java
engine/memory/AbstractMemoryCache.java utils/struct/AbstractLRUMap.java
utils/struct/LRUMapEntry.java
Author: tv
Date: Mon Dec 10 20:58:01 2018
New Revision: 1848636
URL: http://svn.apache.org/viewvc?rev=1848636&view=rev
Log:
Use streaming where appropriate
Removed:
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/LRUMapEntry.java
Modified:
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/match/KeyMatcherPatternImpl.java
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java
commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java
Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/match/KeyMatcherPatternImpl.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/match/KeyMatcherPatternImpl.java?rev=1848636&r1=1848635&r2=1848636&view=diff
==============================================================================
--- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/match/KeyMatcherPatternImpl.java (original)
+++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/match/KeyMatcherPatternImpl.java Mon Dec 10 20:58:01 2018
@@ -1,5 +1,9 @@
package org.apache.commons.jcs.engine.match;
+import java.util.Set;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -21,11 +25,6 @@ package org.apache.commons.jcs.engine.ma
import org.apache.commons.jcs.engine.match.behavior.IKeyMatcher;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
/** This implementation of the KeyMatcher uses standard Java Pattern matching. */
public class KeyMatcherPatternImpl<K>
implements IKeyMatcher<K>
@@ -45,22 +44,8 @@ public class KeyMatcherPatternImpl<K>
{
Pattern compiledPattern = Pattern.compile( pattern );
- Set<K> matchingKeys = new HashSet<K>();
-
- // Look for matches
- for (K key : keyArray)
- {
- // TODO we might want to match on the toString.
- if ( key instanceof String )
- {
- Matcher matcher = compiledPattern.matcher( (String) key );
- if ( matcher.matches() )
- {
- matchingKeys.add( key );
- }
- }
- }
-
- return matchingKeys;
+ return keyArray.stream()
+ .filter(key -> compiledPattern.matcher(key.toString()).matches())
+ .collect(Collectors.toSet());
}
}
Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java?rev=1848636&r1=1848635&r2=1848636&view=diff
==============================================================================
--- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java (original)
+++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java Mon Dec 10 20:58:01 2018
@@ -280,11 +280,12 @@ public abstract class AbstractMemoryCach
*/
public void dumpMap()
{
- log.debug( "dumpingMap" );
- for (Map.Entry<K, MemoryElementDescriptor<K, V>> e : map.entrySet())
+ if (log.isDebugEnabled())
{
- MemoryElementDescriptor<K, V> me = e.getValue();
- log.debug( "dumpMap> key=" + e.getKey() + ", val=" + me.getCacheElement().getVal() );
+ log.debug("dumpingMap");
+ map.entrySet().forEach(e ->
+ log.debug("dumpMap> key=" + e.getKey() + ", val=" +
+ e.getValue().getCacheElement().getVal()));
}
}
Modified: commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java?rev=1848636&r1=1848635&r2=1848636&view=diff
==============================================================================
--- commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java (original)
+++ commons/proper/jcs/trunk/commons-jcs-core/src/main/java/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java Mon Dec 10 20:58:01 2018
@@ -20,17 +20,17 @@ package org.apache.commons.jcs.utils.str
*/
import java.io.Serializable;
+import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashSet;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
import org.apache.commons.jcs.engine.control.group.GroupAttrName;
import org.apache.commons.jcs.engine.stats.StatElement;
@@ -45,7 +45,7 @@ import org.apache.commons.logging.LogFac
* use any but put, get, remove, and clear.
* <p>
* Children can implement the processRemovedLRU method if they want to handle the removal of the
- * lest recently used item.
+ * least recently used item.
* <p>
* This class was abstracted out of the LRU Memory cache. Put, remove, and get should be thread
* safe. It uses a hashtable and our own double linked list.
@@ -162,14 +162,9 @@ public abstract class AbstractLRUMap<K,
@Override
public Collection<V> values()
{
- List<V> valueList = new ArrayList<V>(map.size());
-
- for (LRUElementDescriptor<K, V> value : map.values())
- {
- valueList.add(value.getPayload());
- }
-
- return valueList;
+ return map.values().stream()
+ .map(value -> value.getPayload())
+ .collect(Collectors.toList());
}
/**
@@ -180,10 +175,8 @@ public abstract class AbstractLRUMap<K,
{
if ( source != null )
{
- for (Map.Entry<? extends K, ? extends V> entry : source.entrySet())
- {
- this.put( entry.getKey(), entry.getValue() );
- }
+ source.entrySet()
+ .forEach(entry -> put(entry.getKey(), entry.getValue()));
}
}
@@ -337,7 +330,7 @@ public abstract class AbstractLRUMap<K,
// The spool will put them in a disk event queue, so there is no
// need to pre-queue the queuing. This would be a bit wasteful
// and wouldn't save much time in this synchronous call.
- while ( shouldRemove() )
+ while (shouldRemove())
{
lock.lock();
try
@@ -392,12 +385,12 @@ public abstract class AbstractLRUMap<K,
@SuppressWarnings("unchecked") // No generics for public fields
public void dumpCacheEntries()
{
- log.debug( "dumpingCacheEntries" );
- for ( LRUElementDescriptor<K, V> me = list.getFirst(); me != null; me = (LRUElementDescriptor<K, V>) me.next )
+ if (log.isDebugEnabled())
{
- if ( log.isDebugEnabled() )
+ log.debug("dumpingCacheEntries");
+ for (LRUElementDescriptor<K, V> me = list.getFirst(); me != null; me = (LRUElementDescriptor<K, V>) me.next)
{
- log.debug( "dumpCacheEntries> key=" + me.getKey() + ", val=" + me.getPayload() );
+ log.debug("dumpCacheEntries> key=" + me.getKey() + ", val=" + me.getPayload());
}
}
}
@@ -407,14 +400,11 @@ public abstract class AbstractLRUMap<K,
*/
public void dumpMap()
{
- log.debug( "dumpingMap" );
- for (Map.Entry<K, LRUElementDescriptor<K, V>> e : map.entrySet())
+ if (log.isDebugEnabled())
{
- LRUElementDescriptor<K, V> me = e.getValue();
- if ( log.isDebugEnabled() )
- {
- log.debug( "dumpMap> key=" + e.getKey() + ", val=" + me.getPayload() );
- }
+ log.debug("dumpingMap");
+ map.entrySet().forEach(e ->
+ log.debug("dumpMap> key=" + e.getKey() + ", val=" + e.getValue().getPayload()));
}
}
@@ -562,16 +552,10 @@ public abstract class AbstractLRUMap<K,
lock.lock();
try
{
- // TODO we should return a defensive copy
- Set<Map.Entry<K, LRUElementDescriptor<K, V>>> entries = map.entrySet();
- Set<Map.Entry<K, V>> unWrapped = new HashSet<Map.Entry<K, V>>();
-
- for (Map.Entry<K, LRUElementDescriptor<K, V>> pre : entries) {
- Map.Entry<K, V> post = new LRUMapEntry<K, V>(pre.getKey(), pre.getValue().getPayload());
- unWrapped.add(post);
- }
-
- return unWrapped;
+ return map.entrySet().stream()
+ .map(entry -> new AbstractMap.SimpleEntry<K, V>(
+ entry.getKey(), entry.getValue().getPayload()))
+ .collect(Collectors.toSet());
}
finally
{
@@ -585,8 +569,9 @@ public abstract class AbstractLRUMap<K,
@Override
public Set<K> keySet()
{
- // TODO fix this, it needs to return the keys inside the wrappers.
- return map.keySet();
+ return map.values().stream()
+ .map(value -> value.getKey())
+ .collect(Collectors.toSet());
}
}