You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/05/09 12:48:43 UTC

[04/21] jena git commit: Further simplification in jena-base

Further simplification in jena-base


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/a664cb6c
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/a664cb6c
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/a664cb6c

Branch: refs/heads/jena926-remove-graphstore
Commit: a664cb6cf9f98a20bee3d37f7df869cfb06950bd
Parents: 6b47534
Author: ajs6f <aj...@virginia.edu>
Authored: Mon May 4 15:15:23 2015 -0400
Committer: ajs6f <aj...@virginia.edu>
Committed: Mon May 4 19:49:52 2015 -0400

----------------------------------------------------------------------
 .../sparql/engine/iterator/QueryIterGroup.java  |  22 +-
 .../sparql/engine/iterator/QueryIterTopN.java   |   8 +-
 .../org/apache/jena/sparql/util/Context.java    |   2 +-
 .../org/apache/jena/atlas/iterator/Iter.java    |  22 +-
 .../jena/atlas/iterator/IteratorArray.java      |   3 +-
 .../org/apache/jena/atlas/lib/Allocator.java    |  28 ---
 .../org/apache/jena/atlas/lib/Callback.java     |   5 +-
 .../java/org/apache/jena/atlas/lib/Cell.java    |  99 ---------
 .../apache/jena/atlas/lib/CollectionUtils.java  |   9 +-
 .../java/org/apache/jena/atlas/lib/FileOps.java |  18 +-
 .../org/apache/jena/atlas/lib/ListUtils.java    |  65 ++----
 .../org/apache/jena/atlas/lib/MultiMap.java     | 146 -------------
 .../apache/jena/atlas/lib/MultiMapToList.java   |  43 ----
 .../apache/jena/atlas/lib/MultiMapToSet.java    |  47 ----
 .../org/apache/jena/atlas/lib/MultiSet.java     | 218 -------------------
 .../apache/jena/atlas/lib/PropertyUtils.java    |   4 +-
 .../org/apache/jena/atlas/lib/StrUtils.java     |  41 +---
 .../java/org/apache/jena/atlas/lib/Tuple.java   |   8 +-
 .../org/apache/jena/atlas/lib/TupleBuilder.java |  50 -----
 .../org/apache/jena/atlas/lib/cache/Getter.java |  25 ---
 .../java/org/apache/jena/atlas/lib/TS_Lib.java  |   1 -
 .../org/apache/jena/atlas/lib/TestMultiSet.java | 143 ------------
 .../impl/PropertyTableHashMapImpl.java          |  19 +-
 .../java/org/apache/jena/fuseki/FusekiLib.java  |   8 +-
 .../jena/fuseki/servlets/SPARQL_Protocol.java   |   4 +-
 .../java/org/apache/jena/fuseki/FusekiLib.java  |   8 +-
 .../apache/jena/fuseki/server/DataService.java  |   6 +-
 .../jena/fuseki/servlets/SPARQL_Protocol.java   |   2 +-
 .../jena/tdb/base/block/BlockMgrTracker.java    |  31 +--
 .../jena/query/text/EntityDefinition.java       |   5 +-
 .../assembler/EntityDefinitionAssembler.java    |  19 +-
 31 files changed, 112 insertions(+), 997 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterGroup.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterGroup.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterGroup.java
index e483c58..2b2e194 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterGroup.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterGroup.java
@@ -25,8 +25,10 @@ import java.util.List ;
 
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.iterator.IteratorDelayedInitialization ;
-import org.apache.jena.atlas.lib.MultiMap ;
 import org.apache.jena.atlas.lib.Pair ;
+import org.apache.jena.ext.com.google.common.collect.ArrayListMultimap;
+import org.apache.jena.ext.com.google.common.collect.HashMultimap;
+import org.apache.jena.ext.com.google.common.collect.Multimap;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.core.VarExprList ;
@@ -77,12 +79,12 @@ public class QueryIterGroup extends QueryIterPlainWrapper
             @Override
             protected Iterator<Binding> initializeIterator() {
 
-                boolean noAggregators =  ( aggregators == null || aggregators.size() == 0 ) ;
+                boolean noAggregators =  ( aggregators == null || aggregators.isEmpty() ) ;
                 
-                // Phase 1 : assign bindings to buckets by key and pump through the aggregrators.
-                MultiMap<Binding, Pair<Var, Accumulator>> accumulators = MultiMap.createMapList() ;
+                // Phase 1 : assign bindings to buckets by key and pump through the aggregators.
+                Multimap<Binding, Pair<Var, Accumulator>> accumulators = HashMultimap.create() ;
 
-                for ( ; iter.hasNext() ; )
+                while ( iter.hasNext() )
                 {
                     Binding b = iter.nextBinding() ;
                     Binding key = genKey(groupVarExpr, b, execCxt) ;
@@ -94,9 +96,8 @@ public class QueryIterGroup extends QueryIterPlainWrapper
                         continue ;
                     }
 
-                    Collection<Pair<Var, Accumulator>> accs = accumulators.get(key) ;
                     // Create if does not exist.
-                    if ( accs == null )
+                    if ( !accumulators.containsKey(key) )
                     {
                         for ( ExprAggregator agg : aggregators )
                         {
@@ -104,11 +105,10 @@ public class QueryIterGroup extends QueryIterPlainWrapper
                             Var v = agg.getVar() ;
                             accumulators.put(key, Pair.create(v, x)) ;
                         }
-                        accs = accumulators.get(key) ;
                     }
 
                     // Do the per-accumulator calculation.
-                    for ( Pair<Var, Accumulator> pair : accs )
+                    for ( Pair<Var, Accumulator> pair : accumulators.get(key) )
                         pair.getRight().accumulate(b, execCxt) ;
                 }
 
@@ -153,11 +153,11 @@ public class QueryIterGroup extends QueryIterPlainWrapper
                 
                 if ( noAggregators )
                     // We used placeholder so there are always the key. 
-                    return accumulators.keys().iterator() ;
+                    return accumulators.keySet().iterator() ;
                 
                 List<Binding> results = new ArrayList<>() ;
 
-                for ( Binding k : accumulators.keys() )
+                for ( Binding k : accumulators.keySet() )
                 {
                     Collection<Pair<Var, Accumulator>> accs = accumulators.get(k) ;
                     BindingMap b = BindingFactory.create(k) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterTopN.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterTopN.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterTopN.java
index 266fd1a..f5a39a9 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterTopN.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterTopN.java
@@ -18,6 +18,8 @@
 
 package org.apache.jena.sparql.engine.iterator;
 
+import static java.util.Arrays.asList;
+
 import java.util.Arrays ;
 import java.util.Comparator ;
 import java.util.Iterator ;
@@ -25,7 +27,6 @@ import java.util.List ;
 import java.util.PriorityQueue ;
 
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.IteratorArray ;
 import org.apache.jena.atlas.iterator.IteratorDelayedInitialization ;
 import org.apache.jena.atlas.lib.ReverseComparator ;
 import org.apache.jena.query.Query ;
@@ -87,7 +88,7 @@ public class QueryIterTopN extends QueryIterPlainWrapper
         return new IteratorDelayedInitialization<Binding>() {
             @Override
             protected Iterator<Binding> initializeIterator() {
-                for (; qIter.hasNext();) {
+                while ( qIter.hasNext() ) {
                     Binding binding = qIter.next() ;
                     if ( heap.size() < limit )
                         add(binding) ;
@@ -101,8 +102,7 @@ public class QueryIterTopN extends QueryIterPlainWrapper
                 Binding[] y = heap.toArray(new Binding[]{}) ;
                 heap = null ;
                 Arrays.sort(y, comparator) ;
-                IteratorArray<Binding> iter = IteratorArray.create(y) ;
-                return iter ;
+                return asList(y).iterator() ;
             }
         } ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
index 9107dea..f8c8ed9 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
@@ -273,7 +273,7 @@ public class Context
     {
         for ( Callback<Symbol> c : callbacks )
         {
-            c.proc(symbol) ;
+            c.apply(symbol) ;
         }
     }
     

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
index fc0a534..9cf45a7 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Iter.java
@@ -267,7 +267,7 @@ public class Iter<T> implements Iterator<T> {
      * stream until the first element not passing the filter)
      */
     public static <T> boolean every(Iterator<? extends T> stream, Predicate<T> filter) {
-        for (; stream.hasNext();) {
+        while ( stream.hasNext() ) {
             T item = stream.next() ;
             if ( !filter.test(item) )
                 return false ;
@@ -291,7 +291,7 @@ public class Iter<T> implements Iterator<T> {
      * the stream to first element passing the filter)
      */
     public static <T> boolean some(Iterator<? extends T> stream, Predicate<T> filter) {
-        for (; stream.hasNext();) {
+        while ( stream.hasNext() ) {
             T item = stream.next() ;
             if ( filter.test(item) )
                 return true ;
@@ -420,14 +420,14 @@ public class Iter<T> implements Iterator<T> {
 //    }
 
     public static <T> Iterator<T> removeNulls(Iterator<T> iter) {
-        return filter(iter, x -> x != null) ;
+        return filter(iter, Objects::nonNull) ;
     }
 
     /** Take the first N elements of an iterator - stop early if too few */
     public static <T> List<T> take(Iterator<T> iter, int N) {
         iter = new IteratorN<>(iter, N) ;
         List<T> x = new ArrayList<>(N) ;
-        for (; iter.hasNext();)
+        while ( iter.hasNext() )
             x.add(iter.next()) ;
         return x ;
     }
@@ -611,7 +611,7 @@ public class Iter<T> implements Iterator<T> {
 
     /** Send the elements of the iterator to a sink - consumes the iterator */
     public static <T> void sendToSink(Iterator<T> iter, Sink<T> sink) {
-        for (; iter.hasNext();) {
+        while ( iter.hasNext() ) {
             T thing = iter.next() ;
             sink.send(thing) ;
         }
@@ -635,11 +635,11 @@ public class Iter<T> implements Iterator<T> {
     // { return Iter.iter(Arrays.asList(objects)) ; }
 
     public static <T> Iter<T> iterSingleton(T x) {
-        return Iter.iter(SingletonIterator.create(x)) ;
+        return iter(SingletonIterator.create(x)) ;
     }
 
     public static <T> Iter<T> iter(Collection<T> collection) {
-        return Iter.iter(collection.iterator()) ;
+        return iter(collection.iterator()) ;
     }
 
     public static <T> Iter<T> iter(Iterator<T> iterator) {
@@ -667,7 +667,7 @@ public class Iter<T> implements Iterator<T> {
      * debugging
      */
     public static <T> Iterator<T> materialize(Iterator<T> iter) {
-        return Iter.toList(iter).iterator() ;
+        return toList(iter).iterator() ;
     }
 
     public static <T> Iter<T> concat(Iter<T> iter1, Iter<T> iter2) {
@@ -683,7 +683,7 @@ public class Iter<T> implements Iterator<T> {
             return iter2 ;
         if ( iter2 == null )
             return iter1 ;
-        return Iter.iter(iter1).append(Iter.iter(iter2)) ;
+        return iter(iter1).append(iter(iter2)) ;
     }
 
     public static <T> T first(Iterator<T> iter, Predicate<T> filter) {
@@ -790,7 +790,7 @@ public class Iter<T> implements Iterator<T> {
     }
 
     public Iter<T> removeNulls() {
-        return filter(x -> x != null) ;
+        return iter(removeNulls(this)) ;
     }
 
     public <R> Iter<R> map(Function<T, R> converter) {
@@ -823,7 +823,7 @@ public class Iter<T> implements Iterator<T> {
 
     /** Return an Iter that yields at most the first N items */
     public Iter<T> take(int N) {
-        return Iter.iter(take(iterator, N)) ;
+        return iter(take(iterator, N)) ;
     }
 
     /** Count the iterator (this is destructive on the iterator) */

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorArray.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorArray.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorArray.java
index a8cb1b2..70a8f26 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorArray.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/IteratorArray.java
@@ -25,7 +25,8 @@ import java.util.Spliterator;
 
 /** Iterator over a Java base array */
 /**
- * Prefer {@link Arrays#spliterator(Object[])} or {@link Arrays#stream(Object[])}
+ * Prefer {@link Arrays#asList(Object...)} with {@link Iterable#iterator()} or
+ * {@link Arrays#spliterator(Object[])} or {@link Arrays#stream(Object[])}
  */
 @Deprecated
 public final class IteratorArray<T> implements Iterator<T>

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/Allocator.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Allocator.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Allocator.java
deleted file mode 100644
index 84005de..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Allocator.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.atlas.lib;
-
-public interface Allocator<T>
-{
-    /** Allocate a new T, different from others allocated */ 
-    public T create() ;
-    
-//    /** Reset the process of allocation - may cause equivalent objects to be created from before the reset */  
-//    public void reset() ;
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/Callback.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Callback.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Callback.java
index d2f04f9..647625a 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Callback.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/Callback.java
@@ -18,7 +18,8 @@
 
 package org.apache.jena.atlas.lib;
 
-public interface Callback<T>
+import java.util.function.Function;
+
+public interface Callback<T> extends Function<T, Void>
 {
-    public void proc(T arg) ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/Cell.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Cell.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Cell.java
deleted file mode 100644
index 6910c0c..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Cell.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.atlas.lib ;
-
-
-/** Key-value slot, with chaining for lookup. */  
-public class Cell<K,V>
-{
-    private final Cell<K,V> previous ;
-    private final K key ;
-    private final V value ;
-
-    /** Create a slot with no key, value or parent - can be used a slot chain root */  
-    public Cell()               { this(null, null, null); }
-
-    public Cell(K key, V value) { this(key, value, null); }
-
-    private Cell(K key, V value, Cell<K, V> previous)
-    {
-        this.key = key ;
-        this.value = value ;
-        this.previous = previous ;
-    }
-
-    public Cell<K,V> extend(K key, V value)
-    {
-        return new Cell<>(key, value, this) ;
-    }
-    
-    public final V find(K k)
-    {
-        // Java, tail recursion, lack thereof.
-        Cell<K,V> slot = this ;
-
-        while (slot != null)
-        {
-            // Defend against null keys (e.g. the root of a slot chain). 
-            if ( k.equals(slot.key) )
-                return slot.value ;
-//            if ( previous == null )
-//              return null ;
-            slot = slot.previous ;
-        }
-        return null ;
-    }
-    
-      /* As it should be ... */
-//    public final V find(K k)
-//    {
-//        if ( k.equals(key) )
-//            return value ;
-//        if ( previous == null )
-//            return null ;
-//        return previous.find(k) ;
-//    }
-
-    private static final String sep = ", " ;
-    private void str(int level, StringBuilder acc)
-    {
-        if ( key == null && value == null )
-            return ;
-
-        if ( level != 0 )
-            acc.append(sep) ;
-        acc.append("(") ;
-        acc.append(key.toString()) ;
-        acc.append("->") ;
-        acc.append(value.toString()) ;
-        acc.append(")") ;
-        if ( previous != null )
-            previous.str(level+1, acc) ;
-    }
-
-    @Override
-    public String toString()
-    { 
-        StringBuilder sb = new StringBuilder() ;
-        sb.append("{ ") ;
-        str(0, sb) ;
-        sb.append(" }") ;
-        return sb.toString() ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/CollectionUtils.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/CollectionUtils.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/CollectionUtils.java
index 759e543..9895df8 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/CollectionUtils.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/CollectionUtils.java
@@ -19,16 +19,11 @@
 package org.apache.jena.atlas.lib;
 
 import java.util.Collection ;
-import java.util.Objects;
 
 public class CollectionUtils
-{
-    static public <T> void removeNulls(Collection<T> list)
-    {	
-    		list.removeIf(Objects::isNull);
-    }
-    
+{   
     static public <T> boolean disjoint(Collection<T> c1, Collection<T> c2)
     {
 		return c1.stream().noneMatch(c2::contains);
+    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java
index 6862f4a..cf2e6ee 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/FileOps.java
@@ -19,11 +19,8 @@
 package org.apache.jena.atlas.lib ;
 
 import java.io.File ;
-import java.io.FileInputStream ;
-import java.io.FileOutputStream ;
 import java.io.IOException ;
-import java.nio.channels.FileChannel ;
-
+import java.nio.file.Files;
 import org.apache.jena.atlas.AtlasException ;
 import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.logging.Log ;
@@ -83,9 +80,8 @@ public class FileOps {
         if ( ! d.exists() )
             return ;
         
-        for ( File f : d.listFiles() ) {
-            if ( ".".equals(f.getName()) || "..".equals(f.getName()) )
-                continue ;
+		for (File f : d.listFiles(f -> !f.getName().equals(".")
+				&& !f.getName().equals(".."))) {
             if ( f.isDirectory() )
                 clearAll(f) ;
             f.delete() ;
@@ -215,13 +211,7 @@ public class FileOps {
     /** Copy a file */
     public static void copyFile(File source, File dest) {
         try {
-            @SuppressWarnings("resource")
-            FileChannel sourceChannel = new FileInputStream(source).getChannel() ;
-            @SuppressWarnings("resource")
-            FileChannel destChannel = new FileOutputStream(dest).getChannel() ;
-            destChannel.transferFrom(sourceChannel, 0, sourceChannel.size()) ;
-            sourceChannel.close() ;
-            destChannel.close() ;
+        		Files.copy(source.toPath(), dest.toPath());
         }
         catch (IOException ex) {
             IO.exception(ex) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/ListUtils.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/ListUtils.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/ListUtils.java
index 8315236..2d1345f 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/ListUtils.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/ListUtils.java
@@ -18,13 +18,13 @@
 
 package org.apache.jena.atlas.lib;
 
+import static java.util.Arrays.stream;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toList;
+
 import java.util.ArrayList ;
 import java.util.List ;
-import java.util.function.Consumer;
-
 import org.apache.jena.atlas.io.IndentedWriter ;
-import org.apache.jena.atlas.iterator.FilterUnique ;
-import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.logging.Log ;
 
 /** Various things for lists */
@@ -35,14 +35,13 @@ public class ListUtils
     public static <T>
     List<T> unique(List<T> list)
     {
-        Iter<T> iter = Iter.iter(list.iterator()) ;
-        return iter.filter(new FilterUnique<T>()).toList() ;
+    		return list.stream().distinct().collect(toList());
     }
     
     public static
     List<Integer> asList(int... values)
     {
-        List<Integer> x = new ArrayList<>() ;
+        List<Integer> x = new ArrayList<>(values.length) ;
         for ( int v : values )
             x.add(v) ;
         return x ;
@@ -50,47 +49,17 @@ public class ListUtils
     
     public static <T> String str(T[] array)
     {
-        StringBuilder buff = new StringBuilder() ;
-        String sep = "[" ;
-
-        for ( T anArray : array )
-        {
-            buff.append( sep );
-            sep = ", ";
-            buff.append( anArray );
-        }
-        buff.append("]") ;
-        return buff.toString() ;
+        return stream(array).map(String::valueOf).collect(joining(", ", "[", "]"));
     }
     
     public static String str(int[] array)
     {
-        StringBuilder buff = new StringBuilder() ;
-        String sep = "[" ;
-
-        for ( int anArray : array )
-        {
-            buff.append( sep );
-            sep = ", ";
-            buff.append( anArray );
-        }
-        buff.append("]") ;
-        return buff.toString() ;
+    		return stream(array).mapToObj(String::valueOf).collect(joining(", ", "[", "]"));
     }
     
     public static String str(long[] array)
     {
-        StringBuilder buff = new StringBuilder() ;
-        String sep = "[" ;
-
-        for ( long anArray : array )
-        {
-            buff.append( sep );
-            sep = ", ";
-            buff.append( anArray );
-        }
-        buff.append("]") ;
-        return buff.toString() ;
+    		return stream(array).mapToObj(String::valueOf).collect(joining(", ", "[", "]"));
     }
 
     public static <T> void print(IndentedWriter out, List<T> list)
@@ -98,23 +67,15 @@ public class ListUtils
         print(out, list, " ") ;
     }
     
-    public static <T> void print(final IndentedWriter out, List<T> list, final String sep)
+    public static <T> void print(final IndentedWriter out, List<T> list, final CharSequence sep)
     {
-        Consumer<T> output = new Consumer<T>() {
-            boolean first = true ;
-            @Override
-            public void accept(T item)
-            {
-                if ( ! first ) out.print(sep) ;
-                out.print(item.toString()) ;
-                first = false ;
-            }
-        } ;
-        Iter.apply(list.iterator(), output) ;
+		out.print(list.stream().map(String::valueOf).collect(joining(sep)));
     }
     
     /** Return a list of lists of all the elements of collection in every order
      *  Easy to run out of heap memory.
+     *  
+     *  See {@link com.google.common.collect.Collections2#permutations(Collection<E>)}
      */  
     static public <T> List<List<T>> permute(List<T> c)
     {

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMap.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMap.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMap.java
deleted file mode 100644
index 2782ea6..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMap.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.atlas.lib;
-
-import java.util.* ;
-
-import org.apache.jena.atlas.iterator.IteratorConcat ;
-
-/* Map from K to collection of V */
-
-public abstract class MultiMap<K, V>
-{
-    private Map<K, Collection<V>> map = new HashMap<>() ;
-
-    protected abstract Collection<V> createCollection() ;
-    
-    public static <K, V> MultiMapToList<K, V> createMapList() { return new MultiMapToList<>() ; }
-    public static <K, V> MultiMapToSet<K, V> createMapSet() { return new MultiMapToSet<>() ; }
-    
-    protected MultiMap() { }
-    
-    protected Collection<V> getByKey(K key) { 
-        return map.get(key) ; 
-    } 
-
-    public abstract Collection<V> get(K key) ; 
-    
-    public V getOne(K key) { 
-        Collection<V> c = map.get(key) ;
-        if ( c == null || c.size() == 0 ) 
-            return null ;
-        return c.iterator().next() ;
-    }
-    
-    public void putAll(K key, @SuppressWarnings("unchecked") V ... values)
-    {
-        for ( V v : values)
-            put(key, v) ;
-    }
-    
-    public void put(K key, V value)
-    { 
-        Collection<V> x = map.get(key) ;
-        if ( x == null )
-        {
-            x = createCollection() ;
-            map.put(key, x) ;
-        }
-        x.add(value) ;
-    }
-    
-    public void remove(K key, V value)  {
-        if ( map.containsKey(key))
-            map.get(key).remove(value) ;
-    }
-    public void removeKey(K key)        { map.remove(key) ; }
-    
-    protected Collection<V> valuesForKey(K key) { return map.get(key); }
-    public abstract Collection<V> values(K key) ;
-    public abstract Collection<V> values() ;
-
-    public boolean containsKey(K key) { return map.containsKey(key) ; }
-    
-    public Set<K> keys()        { return map.keySet() ; }
-    
-    public void clear()         { map.clear() ; }
-    
-    public boolean isEmpty()    { return map.isEmpty() ; }
-
-    /** Does not materialise the contents */
-    public Iterator<V> flatten()
-    {
-        IteratorConcat<V> all = new IteratorConcat<>() ;
-        for ( K k : map.keySet() )        
-        {
-            Collection<V> x =  map.get(k) ;
-            all.add(x.iterator()) ;
-        }
-        return all ;
-    }
-    
-    @Override
-    public boolean equals(Object obj) {
-        if ( this == obj )
-            return true ;
-        if ( obj == null )
-            return false ;
-        if ( getClass() != obj.getClass() )
-            return false ;
-        MultiMap<?,?> other = (MultiMap<?,?>)obj ;
-        if ( map == null ) {
-            if ( other.map != null )
-                return false ;
-        } else if ( !map.equals(other.map) )
-            return false ;
-        return true ;
-    }
-    
-    @Override
-    public int hashCode()       { return map.hashCode()^ 0x01010101 ; }
-    
-    @Override
-    public String toString()
-    {
-        StringBuilder sb = new StringBuilder() ;
-        sb.append("{ ") ;
-        boolean firstKey = true ;
-        for ( K key : keys() )
-        {
-            if ( ! firstKey )
-                sb.append(", ") ;
-            firstKey = false ;
-            sb.append(key) ;
-            sb.append(" => [") ;
-            boolean firstValue = true ; 
-            for ( V value : values(key) )
-            {
-                if ( firstValue )
-                    sb.append(" ") ;
-                else
-                    sb.append(", ") ;
-                sb.append(value) ;
-                firstValue = false ;
-            }
-            sb.append(" ] ") ;
-        }
-        sb.append("}") ;
-        return sb.toString() ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMapToList.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMapToList.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMapToList.java
deleted file mode 100644
index ac1ba70..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMapToList.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.atlas.lib;
-
-import java.util.ArrayList ;
-import java.util.Collection ;
-import java.util.List ;
-
-import org.apache.jena.atlas.iterator.Iter ;
-
-public class MultiMapToList<K,V> extends MultiMap<K,V> {
-    public static <K, V> MultiMapToList<K, V> create() { return new MultiMapToList<>() ; }
-    
-    @Override
-    protected Collection<V> createCollection() {
-        return new ArrayList<>() ;
-    }
-    
-    @Override
-    public List<V> get(K key) { return (List<V>)getByKey(key); }
-    
-    @Override
-    public List<V> values(K key) { return (List<V>)valuesForKey(key); }
-    
-    @Override
-    public List<V> values() { return Iter.toList(flatten()) ; }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMapToSet.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMapToSet.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMapToSet.java
deleted file mode 100644
index b89e05b..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiMapToSet.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.atlas.lib;
-
-import java.util.Collection ;
-import java.util.HashSet ;
-import java.util.Set ;
-
-import org.apache.jena.atlas.iterator.Iter ;
-
-public class MultiMapToSet<K,V> extends MultiMap<K,V> {
-    public static <K, V> MultiMapToSet<K, V> create() { return new MultiMapToSet<>() ; }
-    
-    @Override
-    protected Collection<V> createCollection()
-    {
-        return new HashSet<>() ;
-    }
-    
-    @Override
-    public Set<V> get(K key) { return (Set<V>)getByKey(key) ; }
-    
-    @Override
-    public Set<V> values(K key) { return (Set<V>)valuesForKey(key); }
-
-    @Override
-    public Set<V> values() { return Iter.toSet(flatten()) ; }
-
-
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiSet.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiSet.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiSet.java
deleted file mode 100644
index 3701042..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/MultiSet.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.atlas.lib;
-
-import java.util.ArrayList ;
-import java.util.HashMap ;
-import java.util.Iterator ;
-import java.util.List ;
-import java.util.Map ;
-import java.util.NoSuchElementException ;
-
-/** A MultiSet - also known as a Bag
- */
-
-public class MultiSet<T> implements Iterable<T>
-{
-    private Map<T,RefLong> map   = new HashMap<>() ;
-    private int multiSetSize = 0 ;
-    
-    private RefLong _get(T obj)
-    {
-        RefLong z = map.get(obj) ;
-        if ( z == null )
-        {
-            z = new RefLong(0) ;
-            map.put(obj, z) ;
-        }
-        return z ;
-    }
- 
-    /** Does it contain any elements at all? */
-    public boolean isEmpty()        { return map.isEmpty() ; }
-
-    /** Does it contain the object? */
-    public boolean contains(T obj)  { return map.containsKey(obj) ; }
-    
-    /** Yield one object per element (i.e without counts) */
-    public Iterator<T> elements()   { return map.keySet().iterator() ; }
-
-    /** Add an object */
-    public void add(T obj)          { _get(obj).inc(); multiSetSize++ ; } 
-
-    /** Add an object, with cardinality n */
-    public void add(T obj, long n)
-    { 
-        if ( n <= 0 ) return ;
-        _get(obj).add(n) ;
-        multiSetSize += n ;
-    }
-    
-    /** Remove one occurrence of the object from the multiset */
-    public void remove(T obj)
-    {
-        RefLong x = map.get(obj) ;
-        if ( x == null ) return ;
-        x.dec() ;
-        multiSetSize-- ;
-        if ( x.value() == 0 )
-            map.remove(obj) ;
-    }
-    
-    /** Remove N occurrences of the object from the multiset */
-    public void remove(T obj, long n)
-    {
-        RefLong x = map.get(obj) ;
-        if ( x == null ) return ;
-        long z = x.value() ;
-        if ( z < n )
-            n = z ;
-        x.subtract(n) ;
-        multiSetSize -= n ;
-        if ( x.value() <= 0 )
-            map.remove(obj) ;
-    }    
-    
-
-    /** Remove all occurrences of the object in themultiset */
-    public void removeAll(T obj)
-    {
-        RefLong x = map.get(obj) ;
-        if ( x == null )
-            return ;
-        multiSetSize -= x.value() ;
-        map.remove(obj) ;
-    }
-
-    /* Remove everything */
-    public void clear() { map.clear() ; multiSetSize = 0 ; }
-    
-    
-    /** Get the count of the number of times the object appears in the multiset - i.e. it's cardinality.
-     * Returns zero when not present.
-     */
-    public long count(T obj)
-    {
-        if ( ! map.containsKey(obj) ) return 0 ;
-        return map.get(obj).value() ;
-    }
-    
-    public int size()
-    {
-//        int count = 0 ;
-//        for ( Map.Entry<T, RefLong> e : map.entrySet() )
-//            count += e.getValue().value() ;
-//        //return count ;
-//        if ( count != multiSetSize )
-//        {
-//            Log.warn(this, "Mismatch") ;
-//            return count ; 
-//        }
-
-        return multiSetSize ;
-    }
-    
-    private Iterator<T> iterator1()
-    {
-        // CRUDE
-        List<T> expanded = new ArrayList<>() ;
-        for ( Map.Entry<T, RefLong> e : map.entrySet() )
-        {
-            for ( int i = 0 ; i < e.getValue().value() ; i++ )
-                expanded.add(e.getKey()) ;
-        }
-        
-        return expanded.iterator() ;
-    }
-    
-    @Override
-    public Iterator<T> iterator()
-    {
-        return new Iterator<T>() {
-            
-            Iterator<T> keys = map.keySet().iterator() ;
-            T key = null ;
-            long keyCount = 0 ;
-            T slot = null ;
-            
-            @Override
-            public boolean hasNext()
-            {
-                if ( slot != null )
-                    return true ;
-                
-                if ( keys == null ) 
-                    return false ;
-                
-                if ( key != null )
-                {
-                    if ( keyCount < count(key) )
-                    {
-                        keyCount++ ;
-                        slot = key ;
-                        return true ;
-                    }
-                    // End of this key.
-                    key = null ;
-                }
-                    
-                if ( keys.hasNext() )
-                {
-                    key = keys.next() ;
-                    keyCount = 1 ;
-                    slot = key ;
-                    return true ;
-                }
-                keys = null ;
-                return false ;
-            }
-
-            @Override
-            public T next()
-            {
-                if ( ! hasNext() ) throw new NoSuchElementException() ;
-                T x = slot ;
-                slot = null ;
-                return x ;
-            }
-
-            @Override
-            public void remove()
-            { throw new UnsupportedOperationException() ; }
-        } ; 
-    }
-    
-    @Override 
-    public String toString()
-    {
-        StringBuilder sb = new StringBuilder() ;
-        sb.append("{") ;
-        String sep = "" ;
-        for ( Map.Entry<T, RefLong> e : map.entrySet() )
-        {
-            sb.append(sep) ;
-            sep = ", " ;
-            sb.append(e.getKey().toString()) ;
-            sb.append("=") ;
-            sb.append(Long.toString(e.getValue().value())) ;
-        }
-        sb.append("}") ;
-        return sb.toString() ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java
index d4ac5b7..f9acfc8 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/PropertyUtils.java
@@ -92,7 +92,7 @@ public class PropertyUtils {
 
     /** Test whether a property has a value. Null tests equal to not present. */
     public boolean propertyEquals(Properties properties, String key, String value) {
-        return Lib.equal(properties.getProperty(key), value) ;
+        return Objects.equals(properties.getProperty(key), value) ;
     }
 
     /** Set property if not already set. */
@@ -130,7 +130,7 @@ public class PropertyUtils {
     public void checkMetadata(Properties properties, String key, String expected) {
         String value = properties.getProperty(key) ;
 
-        if ( !Lib.equal(value, value) )
+        if ( !Objects.equals(value, value) )
             inconsistent(properties, key, value, expected) ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/StrUtils.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/StrUtils.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/StrUtils.java
index 9a9be76..a61af11 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/StrUtils.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/StrUtils.java
@@ -18,10 +18,15 @@
 
 package org.apache.jena.atlas.lib;
 
+import static java.util.Arrays.stream;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toList;
+
 import java.io.UnsupportedEncodingException ;
 import java.util.ArrayList ;
 import java.util.List ;
 import java.util.Map ;
+import java.util.stream.Collectors;
 
 
 public class StrUtils //extends StringUtils
@@ -54,27 +59,12 @@ public class StrUtils //extends StringUtils
     
     private static String join(String sep, List<String> a)
     {
-        return join(sep, a.toArray(new String[0])) ;
+        return a.stream().collect(joining(sep));
     }
     
     private static String join(String sep, String...a)
-    {
-        if ( a.length == 0 )
-            return "" ;
-
-        if ( a.length == 1)
-            return a[0] ;
-
-        StringBuilder sbuff = new StringBuilder() ;
-        sbuff.append(a[0]) ;
-
-        for ( int i = 1 ; i < a.length ; i++ )
-        {
-            if ( sep != null )
-                sbuff.append(sep) ;
-            sbuff.append(a[i]) ;
-        }
-        return sbuff.toString() ;
+    {	
+    		return stream(a).collect(joining(sep));
     }
     
     public static final int CMP_GREATER  = +1 ;
@@ -127,12 +117,7 @@ public class StrUtils //extends StringUtils
     /** Split but also trim whiespace. */
     public static String[] split(String s, String splitStr)
     {
-        String[] x = s.split(splitStr) ;
-        for ( int i = 0 ; i < x.length ; i++ )
-        {
-            x[i] = x[i].trim() ;
-        }
-        return x ;
+        return stream(s.split(splitStr)).map(String::trim).toArray(String[]::new);
     }
     
     /** Does one string contain another string?
@@ -152,7 +137,7 @@ public class StrUtils //extends StringUtils
     
     public static String substitute(String str, Map<String, String>subs)
     {
-        for ( Map.Entry<String, String> e : subs.entrySet() )
+    		for ( Map.Entry<String, String> e : subs.entrySet() )
         {
             String param = e.getKey() ;
             if ( str.contains(param) ) 
@@ -182,10 +167,8 @@ public class StrUtils //extends StringUtils
     
     public static List<Character> toCharList(String str)
     {
-        List<Character> characters = new ArrayList<>(str.length()) ;
-        for ( Character ch : str.toCharArray() )
-            characters.add(ch) ;
-        return characters ;
+		return str.codePoints().mapToObj(i -> (char) i).map(Character::new)
+				.collect(toList());
     }
     
     // ==== Encoding and decoding strings based on a marker character (e.g. %)

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/Tuple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Tuple.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Tuple.java
index 35a97a5..f991d65 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Tuple.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/Tuple.java
@@ -21,6 +21,7 @@ package org.apache.jena.atlas.lib ;
 import java.util.Arrays ;
 import java.util.Iterator ;
 import java.util.List ;
+import java.util.Objects;
 import java.util.function.Function;
 
 import org.apache.jena.atlas.iterator.Iter ;
@@ -37,9 +38,6 @@ public class Tuple<T> implements Iterable<T> {
     /**
      * Create a tuple from an array of elements. The array is not copied and
      * should not be modified after this call.
-     * <p>
-     * There is also a {@link TupleBuilder} which does create an idendent
-     * copy, in case that style is preferrable for creating tuples.
      */
     public static <X> Tuple<X> create(X[] elements) {
         return new Tuple<>(elements) ;
@@ -90,7 +88,7 @@ public class Tuple<T> implements Iterable<T> {
 
     @Override
     public Iterator<T> iterator() {
-        return Arrays.stream(tuple).iterator() ;
+        return Arrays.asList(tuple).iterator() ;
     }
 
     /** Return a tuple with the column mapping applied */
@@ -130,7 +128,7 @@ public class Tuple<T> implements Iterable<T> {
         for ( int i = 0 ; i < tuple.length ; i++ ) {
             Object obj1 = tuple[i] ;
             Object obj2 = x.tuple[i] ;
-            if ( !Lib.equal(obj1, obj2) )
+            if ( !Objects.equals(obj1, obj2) )
                 return false ;
         }
         return true ;

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/TupleBuilder.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/TupleBuilder.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/TupleBuilder.java
deleted file mode 100644
index 278334d..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/TupleBuilder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.atlas.lib;
-
-
-import java.util.ArrayList ;
-import java.util.List ;
-
-/** Tuple builder class - tuples are immutable, this is how to create them in the builder style */
-public class TupleBuilder<T> 
-{
-    private List<T> x = new ArrayList<>() ;
-    
-    public TupleBuilder() { } 
-    
-    public TupleBuilder<T> add(T element) {
-        x.add(element) ;
-        return this ;
-    }
-    
-    public TupleBuilder<T> reset() {
-        x.clear() ;
-        return this ;
-    }
-    
-    public Tuple<T> build() { 
-        @SuppressWarnings("unchecked")
-        T[] elts = (T[])new Object[x.size()] ; 
-        // Copy contents, should not create a new array because elts
-        // is created with the right size so elts == elts2 
-        T[] elts2 = x.toArray(elts) ;
-        return new Tuple<>(elts2) ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Getter.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Getter.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Getter.java
deleted file mode 100644
index c9f879c..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Getter.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.atlas.lib.cache;
-
-/** A get interface */
-public interface Getter<K, V>
-{
-    public V get(K key) ; 
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
index b91d4ad..ac543c0 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/TS_Lib.java
@@ -46,7 +46,6 @@ import org.junit.runners.Suite ;
     , TestReverseComparator.class
     , TestTrie.class
     , TestFilenameProcessing.class
-    , TestMultiSet.class
     , TestNumberUtils.class
     , TestDateTimeUtils.class
 } )

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-base/src/test/java/org/apache/jena/atlas/lib/TestMultiSet.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestMultiSet.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestMultiSet.java
deleted file mode 100644
index 477386b..0000000
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestMultiSet.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.atlas.lib;
-
-import java.util.Arrays ;
-import java.util.Collections ;
-import java.util.List ;
-
-import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.atlas.lib.MultiSet ;
-import org.junit.Test ;
-
-
-public class TestMultiSet extends BaseTest
-{
-    @Test public void multiSet_01()
-    {
-        MultiSet<String> x = new MultiSet<>() ;
-        assertTrue(x.isEmpty()) ;
-        assertEquals(0, x.count("A")) ;
-    }
-
-    @Test public void multiSet_02()
-    {
-        MultiSet<String> x = new MultiSet<>() ;
-        x.add("A") ;
-        assertFalse(x.isEmpty()) ;
-        assertEquals(1, x.count("A") ) ;
-        x.add("A") ;
-        assertEquals(2, x.count("A") ) ;
-    }
-
-    @Test public void multiSet_03()
-    {
-        MultiSet<String> x = new MultiSet<>() ;
-        x.add("A") ;
-        x.add("A") ;
-        x.remove("A") ;
-        assertEquals(1, x.count("A") ) ;
-        assertTrue(x.contains("A")) ;
-        x.remove("A") ;
-        assertEquals(0, x.count("A") ) ;
-        assertFalse(x.contains("A")) ;
-    }
-
-    @Test public void multiSet_04()
-    {
-        String[] data = { } ;
-        iterTest(data) ;
-    }
-
-
-    @Test public void multiSet_05()
-    {
-        String[] data = { "A" } ;
-        iterTest(data) ;
-    }
-
-    @Test public void multiSet_06()
-    {
-        String[] data = { "A", "B", "C" } ;
-        iterTest(data) ;
-    }
-
-
-    @Test public void multiSet_07()
-    {
-        String[] data = { "A", "B", "C", "A" } ;
-        iterTest(data) ;
-    }
-
-    @Test public void multiSet_08()
-    {
-        String[] data = {  } ;
-        MultiSet<String> x = add(data) ;
-        assertEquals(0, x.size()) ;
-    }
-    
-    @Test public void multiSet_09()
-    {
-        String[] data = { "A", "A" } ;
-        MultiSet<String> x = add(data) ;
-        assertEquals(2, x.size()) ;
-    }
-
-    @Test public void multiSet_10()
-    {
-        String[] data = { "A", "A" } ;
-        MultiSet<String> x = add(data) ;
-        x.remove("A") ;
-        assertEquals(1, x.size()) ;
-        x.remove("A") ;
-        assertEquals(0, x.size()) ;
-        x.remove("A") ;
-        assertEquals(0, x.size()) ;
-    }
-    
-    @Test public void multiSet_11()
-    {
-        String[] data = { "A", "A" } ;
-        MultiSet<String> x = add(data) ;
-        long c = Iter.count(x.elements()) ;
-        assertEquals(1, c) ;
-    }
-    
-    private static MultiSet<String> add(String[] data)
-    {
-        MultiSet<String> x = new MultiSet<>() ;
-        for ( String str : data )
-            x.add(str) ;
-        return x ;
-    }
-    
-    private static void iterTest(String[] data)
-    {
-        List<String> expected = Arrays.asList(data) ;
-        MultiSet<String> x = new MultiSet<>() ;
-        for ( String str : data )
-            x.add(str) ;
-        List<String> actual = Iter.toList(x.iterator()) ;
-        Collections.sort(expected) ;
-        Collections.sort(actual) ;
-        assertEquals(expected, actual) ;
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java
----------------------------------------------------------------------
diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java b/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java
index cee257f..622b3f1 100644
--- a/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java
+++ b/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableHashMapImpl.java
@@ -19,11 +19,12 @@
 package org.apache.jena.propertytable.impl;
 
 import java.util.* ;
-import java.util.Map.Entry ;
+import java.util.Map.Entry;
 
 import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.atlas.iterator.IteratorConcat;
-import org.apache.jena.atlas.lib.MultiMapToSet ;
+import org.apache.jena.ext.com.google.common.collect.HashMultimap;
+import org.apache.jena.ext.com.google.common.collect.SetMultimap ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.propertytable.Column;
@@ -50,7 +51,7 @@ public class PropertyTableHashMapImpl implements PropertyTable {
 	private Map<Node, Map<Node, Node>> valueIndex; 
 	// POS index
 	// Maps column Node to (value, subject Node) pairs
-	private Map<Node, MultiMapToSet<Node, Node>> valueReverseIndex; 
+	private Map<Node, SetMultimap<Node, Node>> valueReverseIndex; 
 
 	PropertyTableHashMapImpl() {
 		columnIndex = new HashMap<Node, Column>();
@@ -58,7 +59,7 @@ public class PropertyTableHashMapImpl implements PropertyTable {
 		rowIndex = new HashMap<Node, Row>();
 		rowList = new ArrayList<Row>();
 		valueIndex = new HashMap<Node, Map<Node, Node>>();
-		valueReverseIndex = new HashMap<Node, MultiMapToSet<Node, Node>>();
+		valueReverseIndex = new HashMap<Node, SetMultimap<Node, Node>>();
 	}
 
 	@Override
@@ -120,7 +121,7 @@ public class PropertyTableHashMapImpl implements PropertyTable {
 		
 		
 		Node p = column.getColumnKey();
-		final MultiMapToSet<Node, Node> valueToSubjectMap = valueReverseIndex.get(p);
+		final SetMultimap<Node, Node> valueToSubjectMap = valueReverseIndex.get(p);
 		if ( valueToSubjectMap == null ) 
 		    return NullIterator.instance() ;
 		final Set<Node> subjects = valueToSubjectMap.get(value);
@@ -171,7 +172,7 @@ public class PropertyTableHashMapImpl implements PropertyTable {
 		columnIndex.put(p, new ColumnImpl(this, p));
 		columnList.add(columnIndex.get(p));
 		valueIndex.put(p, new HashMap<Node, Node>());
-		valueReverseIndex.put(p, MultiMapToSet.<Node, Node> create());
+		valueReverseIndex.put(p, HashMultimap.create());
 		return getColumn(p);
 	}
 
@@ -226,7 +227,7 @@ public class PropertyTableHashMapImpl implements PropertyTable {
 		
 		
 		Node p = column.getColumnKey();
-		final MultiMapToSet<Node, Node> valueToSubjectMap = valueReverseIndex.get(p);
+		final SetMultimap<Node, Node> valueToSubjectMap = valueReverseIndex.get(p);
 		if ( valueToSubjectMap == null )
 		    return Collections.emptyList() ;
 		final Set<Node> subjects = valueToSubjectMap.get(value);
@@ -257,7 +258,7 @@ public class PropertyTableHashMapImpl implements PropertyTable {
 
 	private void addToReverseMap(final Node p, final Node s, final Node oldValue, final Node value) {
 
-		final MultiMapToSet<Node, Node> valueToSubjectMap = valueReverseIndex.get(p);
+		final SetMultimap<Node, Node> valueToSubjectMap = valueReverseIndex.get(p);
 		if ( valueToSubjectMap == null )
             return ; 
 		valueToSubjectMap.remove(oldValue, s);
@@ -281,7 +282,7 @@ public class PropertyTableHashMapImpl implements PropertyTable {
 
 	private void removeFromReverseMap(final Node p, final Node s,
 			final Node value) {
-		final MultiMapToSet<Node, Node> valueTokeysMap = valueReverseIndex.get(p);
+		final SetMultimap<Node, Node> valueTokeysMap = valueReverseIndex.get(p);
 		if ( valueTokeysMap == null )
 		    return ;
 		valueTokeysMap.remove(s, value);

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-fuseki1/src/main/java/org/apache/jena/fuseki/FusekiLib.java
----------------------------------------------------------------------
diff --git a/jena-fuseki1/src/main/java/org/apache/jena/fuseki/FusekiLib.java b/jena-fuseki1/src/main/java/org/apache/jena/fuseki/FusekiLib.java
index ca216f3..e06d692 100644
--- a/jena-fuseki1/src/main/java/org/apache/jena/fuseki/FusekiLib.java
+++ b/jena-fuseki1/src/main/java/org/apache/jena/fuseki/FusekiLib.java
@@ -23,9 +23,9 @@ import java.util.Iterator ;
 import javax.servlet.http.HttpServletRequest ;
 
 import org.apache.commons.lang.StringUtils ;
-import org.apache.jena.atlas.lib.MultiMap ;
-import org.apache.jena.atlas.lib.MultiMapToList ;
 import org.apache.jena.atlas.web.ContentType ;
+import org.apache.jena.ext.com.google.common.collect.ArrayListMultimap;
+import org.apache.jena.ext.com.google.common.collect.Multimap;
 import org.apache.jena.fuseki.servlets.HttpAction ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
@@ -87,8 +87,8 @@ public class FusekiLib {
     }
 
     /** Parse the query string - do not process the body even for a form */
-    public static MultiMap<String, String> parseQueryString(HttpServletRequest req) {
-        MultiMap<String, String> map = MultiMapToList.create() ;
+    public static Multimap<String, String> parseQueryString(HttpServletRequest req) {
+        Multimap<String, String> map = ArrayListMultimap.create() ;
 
         // Don't use ServletRequest.getParameter or getParamterNames
         // as that reads form data. This code parses just the query string.

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-fuseki1/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
----------------------------------------------------------------------
diff --git a/jena-fuseki1/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java b/jena-fuseki1/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
index 84bb858..ed106d8 100644
--- a/jena-fuseki1/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
+++ b/jena-fuseki1/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
@@ -24,6 +24,8 @@ import static org.apache.jena.fuseki.HttpNames.paramNamedGraphURI ;
 import java.util.Arrays ;
 import java.util.Collections ;
 import java.util.List ;
+import java.util.Objects;
+
 import javax.servlet.http.HttpServletRequest ;
 
 import org.apache.jena.atlas.iterator.Iter ;
@@ -74,7 +76,7 @@ public  abstract class SPARQL_Protocol extends SPARQL_ServletBase
 
     private static List<String> removeEmptyValues(List<String> list)
     {
-        return Iter.iter(list).filter(item -> item != null && item.length() != 0).toList() ;
+        return Iter.iter(list).filter(Objects::nonNull).filter(item -> !item.isEmpty()).toList() ;
     }
     
     protected static int countParamOccurences(HttpServletRequest request, String param)

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java
index 3a2a409..1138260 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java
@@ -22,9 +22,9 @@ import java.util.Iterator ;
 
 import javax.servlet.http.HttpServletRequest ;
 
-import org.apache.jena.atlas.lib.MultiMap ;
-import org.apache.jena.atlas.lib.MultiMapToList ;
 import org.apache.jena.atlas.web.ContentType ;
+import org.apache.jena.ext.com.google.common.collect.ArrayListMultimap;
+import org.apache.jena.ext.com.google.common.collect.Multimap;
 import org.apache.jena.fuseki.server.SystemState ;
 import org.apache.jena.fuseki.servlets.HttpAction ;
 import org.apache.jena.graph.Graph ;
@@ -95,8 +95,8 @@ public class FusekiLib {
     }
 
     /** Parse the query string - do not process the body even for a form */
-    public static MultiMap<String, String> parseQueryString(HttpServletRequest req) {
-        MultiMap<String, String> map = MultiMapToList.create() ;
+    public static Multimap<String, String> parseQueryString(HttpServletRequest req) {
+        Multimap<String, String> map = ArrayListMultimap.create() ;
 
         // Don't use ServletRequest.getParameter or getParamterNames
         // as that reads form data. This code parses just the query string.

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java
index 1037390..e4b8793 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java
@@ -25,8 +25,8 @@ import java.util.* ;
 import java.util.concurrent.atomic.AtomicBoolean ;
 import java.util.concurrent.atomic.AtomicLong ;
 
-import org.apache.jena.atlas.lib.MultiMap ;
-import org.apache.jena.atlas.lib.MultiMapToList ;
+import org.apache.jena.ext.com.google.common.collect.ArrayListMultimap;
+import org.apache.jena.ext.com.google.common.collect.ListMultimap;
 import org.apache.jena.fuseki.DEF ;
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.build.DataServiceDesc ;
@@ -54,7 +54,7 @@ public class DataService { //implements DatasetMXBean {
     private final DataServiceDesc svcDesc ;
     private DatasetGraph dataset = null ;              // Only valid if active.
 
-    private MultiMapToList<OperationName, Endpoint> operations     = MultiMap.createMapList() ;
+    private ListMultimap<OperationName, Endpoint> operations     = ArrayListMultimap.create() ;
     private Map<String, Endpoint> endpoints                        = new HashMap<>() ;
     
     private volatile DatasetStatus state = UNINITIALIZED ;

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
index 2a19d03..0be8b6c 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
@@ -79,7 +79,7 @@ public  abstract class SPARQL_Protocol extends ActionSPARQL
         return Iter.iter(list).filter(acceptNonEmpty).toList() ;
     }
     
-    private static Predicate<String> acceptNonEmpty = item -> item != null && item.length() != 0;
+    private static Predicate<String> acceptNonEmpty = item -> item != null && !item.isEmpty();
     
     protected static int countParamOccurences(HttpServletRequest request, String param)
     {

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-tdb/src/main/java/org/apache/jena/tdb/base/block/BlockMgrTracker.java
----------------------------------------------------------------------
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/base/block/BlockMgrTracker.java b/jena-tdb/src/main/java/org/apache/jena/tdb/base/block/BlockMgrTracker.java
index 0173261..9d2f9ee 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/base/block/BlockMgrTracker.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/base/block/BlockMgrTracker.java
@@ -24,7 +24,8 @@ import java.util.ArrayList ;
 import java.util.Iterator ;
 import java.util.List ;
 
-import org.apache.jena.atlas.lib.MultiSet ;
+import org.apache.jena.ext.com.google.common.collect.HashMultiset;
+import org.apache.jena.ext.com.google.common.collect.Multiset;
 import org.apache.jena.atlas.lib.Pair ;
 import org.apache.jena.tdb.TDBException ;
 import org.slf4j.Logger ;
@@ -42,9 +43,9 @@ public class BlockMgrTracker /*extends BlockMgrWrapper*/ implements BlockMgr
     // ---- State for tracking
     // Track and count block references and releases
     //   No - the page is dirty.
-    protected final MultiSet<Long> activeReadBlocks   = new MultiSet<>() ;
-    protected final MultiSet<Long> activeWriteBlocks  = new MultiSet<>() ;
-    protected final MultiSet<Long> activeIterBlocks   = new MultiSet<>() ;
+    protected final Multiset<Long> activeReadBlocks   = HashMultiset.create() ;
+    protected final Multiset<Long> activeWriteBlocks  = HashMultiset.create() ;
+    protected final Multiset<Long> activeIterBlocks   = HashMultiset.create() ;
     // Track the operations 
     protected final List<Pair<Action, Long>> actions = new ArrayList<>() ;
     protected final List<Iterator<?>> activeIterators = new ArrayList<>() ;
@@ -59,13 +60,6 @@ public class BlockMgrTracker /*extends BlockMgrWrapper*/ implements BlockMgr
         actions.clear() ;
     }
     
-    private void clearInternalIter()
-    {
-        clearInternalRW() ;
-        activeIterators.clear() ;
-        activeIterBlocks.clear() ;
-    }
-
     private int inRead = 0 ;
     private int inIterator = 0 ;
     private boolean inUpdate = false ;
@@ -79,11 +73,6 @@ public class BlockMgrTracker /*extends BlockMgrWrapper*/ implements BlockMgr
         return new BlockMgrTracker(label, blkMgr) ;
     }
 
-    private BlockMgrTracker(BlockMgr blockMgr)
-    {
-        this(LoggerFactory.getLogger(BlockMgrTracker.class), blockMgr.getLabel(), blockMgr) ;
-    }
-    
     private BlockMgrTracker(String label, BlockMgr blockMgr)
     {
         this(loggerDefault, label, blockMgr) ;
@@ -411,7 +400,7 @@ public class BlockMgrTracker /*extends BlockMgrWrapper*/ implements BlockMgr
     }
 
 
-    private void checkEmpty(String string, MultiSet<Long> blocks)
+    private void checkEmpty(String string, Multiset<Long> blocks)
     {
         if ( ! blocks.isEmpty() )
         {
@@ -440,11 +429,6 @@ public class BlockMgrTracker /*extends BlockMgrWrapper*/ implements BlockMgr
         log.warn(msg(string)) ;
     }
 
-    private void warn(Action action, String string)
-    {
-        warn(action + ": " + string) ;
-    }
-   
     private void error(String string)
     {
         log.error(msg(string)) ;
@@ -461,9 +445,6 @@ public class BlockMgrTracker /*extends BlockMgrWrapper*/ implements BlockMgr
         //debugPoint() ;
     }
 
-    // Do nothing - but use a a breakpoint point.
-    private void debugPoint() {}
-
     private void history()
     {
         info("History") ;

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java b/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java
index 1eb97b9..2f15ffb 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/EntityDefinition.java
@@ -23,7 +23,8 @@ import java.util.Collections ;
 import java.util.HashMap ;
 import java.util.Map ;
 
-import org.apache.jena.atlas.lib.MultiMap ;
+import org.apache.jena.ext.com.google.common.collect.ArrayListMultimap;
+import org.apache.jena.ext.com.google.common.collect.ListMultimap;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.rdf.model.Resource ;
 import org.apache.lucene.analysis.Analyzer ;
@@ -34,7 +35,7 @@ import org.apache.lucene.analysis.Analyzer ;
 public class EntityDefinition {
     private final Map<Node, String>      predicateToField = new HashMap<>() ;
     private final Map<String, Analyzer>    fieldToAnalyzer  = new HashMap<>();
-    private final MultiMap<String, Node> fieldToPredicate = MultiMap.createMapList() ;
+    private final ListMultimap<String, Node> fieldToPredicate = ArrayListMultimap.create() ;
     private final Collection<String>     fields           = Collections.unmodifiableCollection(fieldToPredicate.keys()) ;
     // private final Collection<String> fields =
     // Collections.unmodifiableCollection(fieldToPredicate.keySet()) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/a664cb6c/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java b/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java
index f677778..a54fc92 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/assembler/EntityDefinitionAssembler.java
@@ -28,9 +28,11 @@ import java.util.Map;
 import org.apache.jena.assembler.Assembler ;
 import org.apache.jena.assembler.Mode ;
 import org.apache.jena.assembler.assemblers.AssemblerBase ;
-import org.apache.jena.atlas.lib.MultiMap ;
 import org.apache.jena.atlas.lib.StrUtils ;
 import org.apache.jena.atlas.logging.Log ;
+import org.apache.jena.ext.com.google.common.collect.HashMultimap;
+import org.apache.jena.ext.com.google.common.collect.Multimap;
+import org.apache.jena.ext.com.google.common.collect.Multimaps;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.query.* ;
 import org.apache.jena.query.text.EntityDefinition ;
@@ -88,7 +90,7 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
         String graphField = qsol1.contains("graphField") ? qsol1.getLiteral("graphField").getLexicalForm() : null;
         String defaultField = qsol1.contains("dftField") ? qsol1.getLiteral("dftField").getLexicalForm() : null ;
 
-        MultiMap<String, Node> mapDefs = MultiMap.createMapList() ; 
+        Multimap<String, Node> mapDefs = HashMultimap.create() ; 
         Map<String, Analyzer> analyzerDefs = new HashMap<>();
 
         Statement listStmt = root.getProperty(TextVocab.pMap);
@@ -97,7 +99,7 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
             if (! n.isResource()) {
                 throw new TextIndexException("Text list node is not a resource : " + n);
             }
-            Resource listResource = (Resource) n;
+            Resource listResource = n.asResource();
             if (listResource.equals(RDF.nil)) {
                 break;  // end of the list
             }
@@ -110,7 +112,7 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
             if (! n.isResource()) {
                 throw new TextIndexException("Text map list entry is not a resource : " + n);
             }
-            Resource listEntry = (Resource) n;
+            Resource listEntry = n.asResource();
 
             Statement fieldStatement = listEntry.getProperty(TextVocab.pField);
             if (fieldStatement == null) {
@@ -120,7 +122,7 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
             if (! n.isLiteral()) {
                 throw new TextIndexException("Text map entry field property has no literal value : " + n);
             }
-            String field = ((Literal)n).getLexicalForm();
+            String field = n.asLiteral().getLexicalForm();
 
             Statement predicateStatement = listEntry.getProperty(TextVocab.pPredicate);
             if (predicateStatement == null) {
@@ -130,8 +132,7 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
             if (! n.isURIResource()) {
                 throw new TextIndexException("Text map entry predicate property has non resource value : " + n);
             }
-            Resource predicate = (Resource) n;
-            mapDefs.put(field, predicate.asNode()) ;
+            mapDefs.put(field, n.asNode()) ;
 
             Statement analyzerStatement = listEntry.getProperty(TextVocab.pAnalyzer);
             if (analyzerStatement != null) {
@@ -139,7 +140,7 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
                 if (! n.isResource()) {
                     throw new TextIndexException("Text map entry analyzer property is not a resource : " + n);
                 }
-                Resource analyzerResource = (Resource) n;
+                Resource analyzerResource = n.asResource();
                 Analyzer analyzer = (Analyzer) a.open(analyzerResource);
                 analyzerDefs.put(field, analyzer);
             }
@@ -151,7 +152,7 @@ public class EntityDefinitionAssembler extends AssemblerBase implements Assemble
         // Primary field/predicate
         if ( defaultField != null ) {
             Collection<Node> c = mapDefs.get(defaultField) ;
-            if ( c == null )
+            if ( c.isEmpty() )
                 throw new TextIndexException("No definition of primary field '"+defaultField+"'") ;
         }