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:41 UTC

[02/21] jena git commit: Using Java 8 types in o.a.j.atlas

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestStreamRDFThrift.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestStreamRDFThrift.java b/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestStreamRDFThrift.java
index ff87bcc..192953f 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestStreamRDFThrift.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestStreamRDFThrift.java
@@ -21,8 +21,6 @@ package org.apache.jena.riot.thrift;
 import java.io.ByteArrayInputStream ;
 import java.io.ByteArrayOutputStream ;
 import java.util.Iterator ;
-
-import org.apache.jena.atlas.iterator.Filter ;
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.junit.BaseTest ;
 import org.apache.jena.atlas.lib.StrUtils ;
@@ -130,7 +128,7 @@ public class TestStreamRDFThrift extends BaseTest {
         boolean b = IsoMatcher.isomorphic(dsg1, dsg2) ;
         assertTrue(b) ;
         // Stronger - same bNode and same as in original data.
-        Node obj = Iter.first(dsg1.listGraphNodes(), filterBlankNode) ;
+        Node obj = Iter.first(dsg1.listGraphNodes(), Node::isBlank) ;
         termAsObject(dsg1, obj) ;
     }
 
@@ -149,7 +147,7 @@ public class TestStreamRDFThrift extends BaseTest {
         boolean b = IsoMatcher.isomorphic(dsg1, dsg2) ;
         assertTrue(b) ;
         // Stronger - same bNode and same as in original data.
-        Node obj = Iter.first(dsg1.listGraphNodes(), filterBlankNode) ;
+        Node obj = Iter.first(dsg1.listGraphNodes(), Node::isBlank) ;
         termAsObject(dsg1, obj) ;
     }
     
@@ -174,13 +172,6 @@ public class TestStreamRDFThrift extends BaseTest {
         fail("Failed to find "+term) ;
     }
     
-    static Filter<Node> filterBlankNode = new Filter<Node>() {
-        @Override
-        public boolean accept(Node item) {
-            return item.isBlank() ;
-        }
-    } ;
-    
     // ** Java8
 //    public static <T> Stream<T> stream(Iterator<? extends T> iterator) {
 //        int characteristics = Spliterator.ORDERED | Spliterator.IMMUTABLE;

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/Action.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Action.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Action.java
index de2630e..d9c14ab 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Action.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Action.java
@@ -18,7 +18,12 @@
 
 package org.apache.jena.atlas.iterator;
 
-public interface Action<T>
+import java.util.function.Consumer;
+
+/**
+ * Prefer {@link Consumer}
+ */
+@Deprecated
+public interface Action<T> extends Consumer<T>
 {
-    public void apply(T item) ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/ActionCount.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/ActionCount.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/ActionCount.java
index 20f837c..1ec0354 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/ActionCount.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/ActionCount.java
@@ -18,13 +18,15 @@
 
 package org.apache.jena.atlas.iterator;
 
+import java.util.function.Consumer;
 
-public class ActionCount<T> implements Action<T>
+
+public class ActionCount<T> implements Consumer<T>
 {
     private long count = 0 ;
     
     @Override
-    public void apply(T item)
+    public void accept(T item)
     { count++ ; }
     
     public long getCount() { return count ; }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/ActionNothing.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/ActionNothing.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/ActionNothing.java
deleted file mode 100644
index d05b279..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/ActionNothing.java
+++ /dev/null
@@ -1,26 +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.iterator;
-
-
-public class ActionNothing<T> implements Action<T>
-{
-    @Override
-    public void apply(T item)   { }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/Filter.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Filter.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Filter.java
index 5d427c5..689f5bc 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Filter.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Filter.java
@@ -18,5 +18,11 @@
 
 package org.apache.jena.atlas.iterator;
 
+import java.util.function.Predicate;
+
+/**
+ * Prefer {@link Predicate}.
+ */
 @FunctionalInterface
-public interface Filter <T> { boolean accept(T item) ; }
+@Deprecated
+public interface Filter <T> extends Predicate<T>{  }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterDistinctAdjacent.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterDistinctAdjacent.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterDistinctAdjacent.java
index 3beb832..e2bc4b4 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterDistinctAdjacent.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterDistinctAdjacent.java
@@ -18,17 +18,17 @@
 
 package org.apache.jena.atlas.iterator;
 
+import java.util.function.Predicate;
+
 import org.apache.jena.atlas.lib.Lib ;
 
-public class FilterDistinctAdjacent<T> implements Filter<T>
+public class FilterDistinctAdjacent<T> implements Predicate<T>
 {
     private boolean isSet = false ;
     private T last = null ; 
     
-    public FilterDistinctAdjacent() { }
-    
     @Override
-    public boolean accept(T item)
+    public boolean test(T item)
     {
         if ( isSet && Lib.equal(last, item) )
             return false ;

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterOutNulls.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterOutNulls.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterOutNulls.java
deleted file mode 100644
index 21cd471..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterOutNulls.java
+++ /dev/null
@@ -1,32 +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.iterator;
-
-
-public class FilterOutNulls<T> implements Filter<T>
-{
-    public FilterOutNulls() { }
-    
-    @Override
-    public boolean accept(T item)
-    {
-        return item != null ;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterStack.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterStack.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterStack.java
index 479d93f..c4d5e86 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterStack.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterStack.java
@@ -18,24 +18,26 @@
 
 package org.apache.jena.atlas.iterator;
 
+import java.util.function.Predicate;
+
 /**
  * Add a filter to a chain - the original filter is called after this new sub-filter.
  */
-public abstract class FilterStack<T> implements  Filter<T>
+public abstract class FilterStack<T> implements  Predicate<T>
 {
-    private final Filter<T> other ;
+    private final Predicate<T> other ;
     private final boolean subFilterLast ;
     
-    public FilterStack(Filter<T> other) { this(other, false) ; }
+    public FilterStack(Predicate<T> other) { this(other, false) ; }
     
-    public FilterStack(Filter<T> other, boolean callOldFilterFirst)
+    public FilterStack(Predicate<T> other, boolean callOldFilterFirst)
     {
         this.other = other ;
         this.subFilterLast = callOldFilterFirst ;
     }
    
     @Override
-    public final boolean accept(T item)
+    public final boolean test(T item)
     {
         if ( subFilterLast )
             return acceptAdditionaOther(item) ;
@@ -48,7 +50,7 @@ public abstract class FilterStack<T> implements  Filter<T>
         if ( ! acceptAdditional(item) )
             return false ;
         
-        if ( other != null && ! other.accept(item) )
+        if ( other != null && ! other.test(item) )
             return false ;
         
         return true ;
@@ -56,7 +58,7 @@ public abstract class FilterStack<T> implements  Filter<T>
 
     private boolean acceptOtherAdditional(T item)
     {
-        if ( other != null && ! other.accept(item) )
+        if ( other != null && ! other.test(item) )
             return false ;
         return acceptAdditional(item) ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterUnique.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterUnique.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterUnique.java
index 2b2a957..4f21072 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterUnique.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/FilterUnique.java
@@ -20,20 +20,16 @@ package org.apache.jena.atlas.iterator;
 
 import java.util.HashSet ;
 import java.util.Set ;
+import java.util.function.Predicate;
 
-public class FilterUnique<T> implements Filter<T>
+public class FilterUnique<T> implements Predicate<T>
 {
     private Set<T> seen = new HashSet<>() ;
     
-    public FilterUnique() { }
-    
     @Override
-    public boolean accept(T item)
+    public boolean test(T item)
     {
-        if ( seen.contains(item) )
-            return false ;
-        seen.add(item) ;
-        return true ;
+        return seen.add(item) ;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/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 8aec2ea..fc0a534 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
@@ -20,10 +20,12 @@ package org.apache.jena.atlas.iterator ;
 
 import java.io.PrintStream ;
 import java.util.* ;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.stream.Stream ;
 import java.util.stream.StreamSupport ;
 
-import org.apache.jena.atlas.lib.ActionKeyValue ;
 import org.apache.jena.atlas.lib.Closeable ;
 import org.apache.jena.atlas.lib.Sink ;
 
@@ -182,27 +184,20 @@ public class Iter<T> implements Iterator<T> {
 //        apply(stream.iterator(), action) ;
 //    }
 
-    public static <T> void apply(Iterator<? extends T> stream, Action<T> action) {
+    public static <T> void apply(Iterator<? extends T> stream, Consumer<T> action) {
         for (; stream.hasNext();) {
             T item = stream.next() ;
-            action.apply(item) ;
+            action.accept(item) ;
         }
     }
 
-    // -- Map specific apply. No results - do immediately.
-
-    public static <K, V> void apply(Map<K, V> map, ActionKeyValue<K, V> action) {
-        for (Map.Entry<K, V> entry : map.entrySet())
-            action.apply(entry.getKey(), entry.getValue()) ;
-    }
-
     // ---- Filter
 
 //    public static <T> Iterator<T> filter(Iterable<? extends T> stream, Filter<T> filter) {
 //        return filter(stream.iterator(), filter) ;
 //    }
 
-    public static <T> Iterator<T> filter(final Iterator<? extends T> stream, final Filter<T> filter) {
+    public static <T> Iterator<T> filter(final Iterator<? extends T> stream, final Predicate<T> filter) {
         final Iterator<T> iter = new Iterator<T>() {
 
             boolean finished     = false ;
@@ -219,7 +214,7 @@ public class Iter<T> implements Iterator<T> {
                         break ;
                     }
                     T nextItem = stream.next() ;
-                    if ( filter.accept(nextItem) ) {
+                    if ( filter.test(nextItem) ) {
                         slot = nextItem ;
                         slotOccupied = true ;
                         break ;
@@ -246,29 +241,12 @@ public class Iter<T> implements Iterator<T> {
         return iter ;
     }
 
-    private static class InvertedFilter<T> implements Filter<T> {
-        public static <T> Filter<T> invert(Filter<T> filter) {
-            return new InvertedFilter<>(filter) ;
-        }
-        private Filter<T> baseFilter ;
-
-        private InvertedFilter(Filter<T> baseFilter) {
-            this.baseFilter = baseFilter ;
-        }
-
-        @Override
-        public boolean accept(T item) {
-            return !baseFilter.accept(item) ;
-        }
-    }
-
 //    public static <T> Iterator<T> notFilter(Iterable<? extends T> stream, Filter<T> filter) {
 //        return notFilter(stream.iterator(), filter) ;
 //    }
 
-    public static <T> Iterator<T> notFilter(final Iterator<? extends T> stream, final Filter<T> filter) {
-        Filter<T> flippedFilter = InvertedFilter.invert(filter) ;
-        return filter(stream, flippedFilter) ;
+    public static <T> Iterator<T> notFilter(final Iterator<? extends T> stream, final Predicate<T> filter) {
+        return filter(stream, filter.negate()) ;
     }
 
     // Filter-related
@@ -288,10 +266,10 @@ public class Iter<T> implements Iterator<T> {
      * Return true if every element of stream passes the filter (reads the
      * stream until the first element not passing the filter)
      */
-    public static <T> boolean every(Iterator<? extends T> stream, Filter<T> filter) {
+    public static <T> boolean every(Iterator<? extends T> stream, Predicate<T> filter) {
         for (; stream.hasNext();) {
             T item = stream.next() ;
-            if ( !filter.accept(item) )
+            if ( !filter.test(item) )
                 return false ;
         }
         return true ;
@@ -312,10 +290,10 @@ public class Iter<T> implements Iterator<T> {
      * Return true if one or more elements of stream passes the filter (reads
      * the stream to first element passing the filter)
      */
-    public static <T> boolean some(Iterator<? extends T> stream, Filter<T> filter) {
+    public static <T> boolean some(Iterator<? extends T> stream, Predicate<T> filter) {
         for (; stream.hasNext();) {
             T item = stream.next() ;
-            if ( filter.accept(item) )
+            if ( filter.test(item) )
                 return true ;
         }
         return false ;
@@ -327,7 +305,7 @@ public class Iter<T> implements Iterator<T> {
 //        return map(stream.iterator(), converter) ;
 //    }
 
-    public static <T, R> Iterator<R> map(final Iterator<? extends T> stream, final Transform<T, R> converter) {
+    public static <T, R> Iterator<R> map(final Iterator<? extends T> stream, final Function<T, R> converter) {
         final Iterator<R> iter = new Iterator<R>() {
             @Override
             public boolean hasNext() {
@@ -336,7 +314,7 @@ public class Iter<T> implements Iterator<T> {
 
             @Override
             public R next() {
-                return converter.convert(stream.next()) ;
+                return converter.apply(stream.next()) ;
             }
 
             @Override
@@ -347,68 +325,14 @@ public class Iter<T> implements Iterator<T> {
         return iter ;
     }
 
-    public static <T, R> List<R> map(List<? extends T> list, Transform<T, R> converter) {
+    public static <T, R> List<R> map(List<? extends T> list, Function<T, R> converter) {
         return toList(map(list.iterator(), converter)) ;
     }
 
-    /**
-     * Projects each element of a sequence to an Iterator&lt;R&gt; and flattens
-     * the resulting sequences into one sequence.
-     */
-    public static <T, R> Iterator<R> mapMany(final Iterator<? extends T> stream,
-                                             final Transform<? super T, Iterator<R>> converter) {
-        final Iterator<R> iter = new Iterator<R>() {
-
-            private Iterator<? extends R> it = null ; // Iterator for the
-                                                      // current element of
-                                                      // stream.
-
-            @Override
-            public boolean hasNext() {
-                if ( it != null && it.hasNext() )
-                    // Element of the current iterator.
-                    return true ;
-                // Start or current iterator has ended.
-                it = null ;
-
-                // Need to move to next non-empty iterator of the stream.
-                while (stream.hasNext()) {
-                    it = converter.convert(stream.next()) ;
-                    if ( it.hasNext() )
-                        // There is something.
-                        return true ;
-                }
-                it = null ;
-                // Stream ran out.
-                return false ;
-            }
-
-            @Override
-            public R next() {
-                if ( !hasNext() )
-                    throw new NoSuchElementException() ;
-                // "it" is always left with something to yield if hashNext is
-                // true.
-                return it.next() ;
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException("mapMany.remove") ;
-            }
-        } ;
-
-        return iter ;
-    }
-
 //    public static <T, R> Iterator<R> mapMany(Iterable<? extends T> stream, Transform<T, Iterator<R>> converter) {
 //        return mapMany(stream.iterator(), converter) ;
 //    }
 
-    public static <T, R> List<R> mapMany(List<? extends T> list, Transform<T, Iterator<R>> converter) {
-        return toList(mapMany(list.iterator(), converter)) ;
-    }
-
 //    /**
 //     * Apply an action to everything in stream, yielding a stream of the same
 //     * items
@@ -421,7 +345,7 @@ public class Iter<T> implements Iterator<T> {
      * Apply an action to everything in stream, yielding a stream of the same
      * items
      */
-    public static <T> Iterator<T> operate(final Iterator<? extends T> stream, final Action<T> action) {
+    public static <T> Iterator<T> operate(final Iterator<? extends T> stream, final Consumer<T> action) {
         final Iterator<T> iter = new Iterator<T>() {
             @Override
             public boolean hasNext() {
@@ -431,7 +355,7 @@ public class Iter<T> implements Iterator<T> {
             @Override
             public T next() {
                 T t = stream.next() ;
-                action.apply(t) ;
+                action.accept(t) ;
                 return t ;
             }
 
@@ -450,13 +374,7 @@ public class Iter<T> implements Iterator<T> {
 
     /** Print an iterator as it gets used - this adds a printing wrapper */
     public static <T> Iterator<T> printWrapper(final PrintStream out, final Iterator<? extends T> stream) {
-        Action<T> action = new Action<T>() {
-            @Override
-            public void apply(T item) {
-                out.println(item) ;
-            }
-        } ;
-        return Iter.operate(stream, action) ;
+        return Iter.operate(stream, out::println) ;
     }
 
 //    /** Join two iteratables
@@ -502,7 +420,7 @@ public class Iter<T> implements Iterator<T> {
 //    }
 
     public static <T> Iterator<T> removeNulls(Iterator<T> iter) {
-        return filter(iter, new FilterOutNulls<T>()) ;
+        return filter(iter, x -> x != null) ;
     }
 
     /** Take the first N elements of an iterator - stop early if too few */
@@ -667,14 +585,7 @@ public class Iter<T> implements Iterator<T> {
      */
     public static <T> Iterator<T> debug(final PrintStream out, Iterator<T> stream) {
         try { 
-            Transform<T, T> x = new Transform<T, T>() {
-                @Override
-                public T convert(T item) {
-                    out.println(item) ;
-                    return item ;
-                }
-            } ;
-            return map(stream, x) ;
+            return map(stream, item -> {out.println(item); return item;}) ;
         } finally { out.flush() ; }
     }
 
@@ -685,14 +596,7 @@ public class Iter<T> implements Iterator<T> {
 
     /** Print an iterator (destructive) */
     public static <T> void print(final PrintStream out, Iterator<T> stream) {
-        Action<T> x = new Action<T>() {
-            @Override
-            public void apply(T item) {
-                out.println(item) ;
-            }
-
-        } ;
-        apply(stream, x) ;
+        apply(stream, out::println) ;
     }
 
 //    /** Print an iterable */
@@ -782,58 +686,57 @@ public class Iter<T> implements Iterator<T> {
         return Iter.iter(iter1).append(Iter.iter(iter2)) ;
     }
 
-    public static <T> T first(Iterator<T> iter, Filter<T> filter) {
-        for (int idx = 0; iter.hasNext(); idx++) {
+    public static <T> T first(Iterator<T> iter, Predicate<T> filter) {
+        while (iter.hasNext()) {
             T t = iter.next() ;
-            if ( filter.accept(t) )
+            if ( filter.test(t) )
                 return t ;
-            // return idx ;
         }
         return null ;
     }
 
-    public static <T> T first(Collection<T> collection, Filter<T> filter) {
-        return first(collection.iterator(), filter) ;
+    public static <T> T first(Collection<T> collection, Predicate<T> filter) {
+        return collection.stream().filter(filter).findFirst().orElse(null);
     }
 
-    public static <T> int firstIndex(Iterator<T> iter, Filter<T> filter) {
+    public static <T> int firstIndex(Iterator<T> iter, Predicate<T> filter) {
         for (int idx = 0; iter.hasNext(); idx++) {
             T t = iter.next() ;
-            if ( filter.accept(t) )
+            if ( filter.test(t) )
                 return idx ;
         }
         return -1 ;
     }
 
-    public static <T> int firstIndex(Collection<T> collection, Filter<T> filter) {
+    public static <T> int firstIndex(Collection<T> collection, Predicate<T> filter) {
         return firstIndex(collection.iterator(), filter) ;
     }
 
-    public static <T> T last(Iterator<T> iter, Filter<T> filter) {
+    public static <T> T last(Iterator<T> iter, Predicate<T> filter) {
         T thing = null ;
-        for (int idx = 0; iter.hasNext(); idx++) {
+        while (iter.hasNext()) {
             T t = iter.next() ;
-            if ( filter.accept(t) )
+            if ( filter.test(t) )
                 thing = t ;
         }
         return thing ;
     }
 
-    public static <T> T last(Collection<T> collection, Filter<T> filter) {
+    public static <T> T last(Collection<T> collection, Predicate<T> filter) {
         return last(collection.iterator(), filter) ;
     }
 
-    public static <T> int lastIndex(Iterator<T> iter, Filter<T> filter) {
+    public static <T> int lastIndex(Iterator<T> iter, Predicate<T> filter) {
         int location = -1 ;
         for (int idx = 0; iter.hasNext(); idx++) {
             T t = iter.next() ;
-            if ( filter.accept(t) )
+            if ( filter.test(t) )
                 location = idx ;
         }
         return location ;
     }
 
-    public static <T> int lastIndex(Collection<T> collection, Filter<T> filter) {
+    public static <T> int lastIndex(Collection<T> collection, Predicate<T> filter) {
         return lastIndex(collection.iterator(), filter) ;
     }
 
@@ -858,39 +761,39 @@ public class Iter<T> implements Iterator<T> {
         sendToSink(iterator, sink) ;
     }
 
-    public T first(Filter<T> filter) {
+    public T first(Predicate<T> filter) {
         return first(iterator, filter) ;
     }
 
-    public int firstIndex(Filter<T> filter) {
+    public int firstIndex(Predicate<T> filter) {
         return firstIndex(iterator, filter) ;
     }
 
-    public T last(Filter<T> filter) {
+    public T last(Predicate<T> filter) {
         return last(iterator, filter) ;
     }
 
-    public int lastIndex(Filter<T> filter) {
+    public int lastIndex(Predicate<T> filter) {
         return lastIndex(iterator, filter) ;
     }
 
-    public Iter<T> filter(Filter<T> filter) {
+    public Iter<T> filter(Predicate<T> filter) {
         return iter(filter(iterator, filter)) ;
     }
 
-    public boolean every(Filter<T> filter) {
+    public boolean every(Predicate<T> filter) {
         return every(iterator, filter) ;
     }
 
-    public boolean some(Filter<T> filter) {
+    public boolean some(Predicate<T> filter) {
         return some(iterator, filter) ;
     }
 
     public Iter<T> removeNulls() {
-        return filter(new FilterOutNulls<T>()) ;
+        return filter(x -> x != null) ;
     }
 
-    public <R> Iter<R> map(Transform<T, R> converter) {
+    public <R> Iter<R> map(Function<T, R> converter) {
         return iter(map(iterator, converter)) ;
     }
 
@@ -898,7 +801,7 @@ public class Iter<T> implements Iterator<T> {
      * Apply an action to everything in the stream, yielding a stream of the
      * same items
      */
-    public Iter<T> operate(Action<T> action) {
+    public Iter<T> operate(Consumer<T> action) {
         return iter(operate(iterator, action)) ;
     }
 
@@ -906,7 +809,7 @@ public class Iter<T> implements Iterator<T> {
         return reduce(iterator, aggregator) ;
     }
 
-    public void apply(Action<T> action) {
+    public void apply(Consumer<T> action) {
         apply(iterator, action) ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/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 ee45935..a8cb1b2 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
@@ -18,10 +18,16 @@
 
 package org.apache.jena.atlas.iterator;
 
+import java.util.Arrays;
 import java.util.Iterator ;
 import java.util.NoSuchElementException ;
+import java.util.Spliterator;
 
 /** Iterator over a Java base array */
+/**
+ * Prefer {@link Arrays#spliterator(Object[])} or {@link Arrays#stream(Object[])}
+ */
+@Deprecated
 public final class IteratorArray<T> implements Iterator<T>
 {
     /** Iterator over all the array elements */ 

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/MapUtils.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/MapUtils.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/MapUtils.java
deleted file mode 100644
index 3c6492e..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/MapUtils.java
+++ /dev/null
@@ -1,36 +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.iterator;
-
-import java.util.Map ;
-
-import org.apache.jena.atlas.lib.ActionKeyValue ;
-
-
-
-public class MapUtils
-{
-     // Map specific operations
-    
-    public static <K, V> void apply(Map<K, V> map, ActionKeyValue<K, V> action)
-    {
-        for ( Map.Entry<K,V> entry : map.entrySet() )
-            action.apply(entry.getKey(), entry.getValue()) ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/iterator/Transform.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Transform.java b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Transform.java
index d5d6a0a..67fc3af 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/iterator/Transform.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/iterator/Transform.java
@@ -18,4 +18,10 @@
 
 package org.apache.jena.atlas.iterator;
 
-public interface Transform <T, R> { R convert(T item) ; }
+import java.util.function.Function;
+
+/**
+ * Prefer {@link Function}.
+ */
+@Deprecated
+public interface Transform <T, R> extends Function<T,R>{ }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java
index 894107a..12dadab 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/ActionKeyValue.java
@@ -18,7 +18,12 @@
 
 package org.apache.jena.atlas.lib;
 
-public interface ActionKeyValue<KeyType, ValueType>
+import java.util.function.BiConsumer;
+
+/**
+ * Prefer {@link BiConsumer<KeyType, ValueType>}.
+ */
+@Deprecated
+public interface ActionKeyValue<KeyType, ValueType> extends BiConsumer<KeyType, ValueType>
 {
-    public void apply(KeyType key, ValueType value) ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/Cache.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Cache.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Cache.java
index d7fa711..8ebf2d7 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Cache.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/Cache.java
@@ -20,6 +20,7 @@ package org.apache.jena.atlas.lib;
 
 import java.util.Iterator ;
 import java.util.concurrent.Callable ;
+import java.util.function.BiConsumer;
 
 /** A cache */
 public interface Cache<Key, Value>
@@ -52,5 +53,5 @@ public interface Cache<Key, Value>
     public long size() ;
     
     /** Register a callback - called when an object is dropped from the cache (optional operation) */ 
-    public void setDropHandler(ActionKeyValue<Key,Value> dropHandler) ;
+    public void setDropHandler(BiConsumer<Key,Value> dropHandler) ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/CacheSet.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/CacheSet.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/CacheSet.java
index f5c3d22..0f709b0 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/CacheSet.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/CacheSet.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.atlas.lib;
 
-import org.apache.jena.atlas.iterator.Action ;
+import java.util.function.Consumer;
 
 public interface CacheSet<T>
 {
@@ -30,5 +30,5 @@ public interface CacheSet<T>
     public void remove(T obj) ;
     public long size() ;
     /** Register a callback - called when an object is dropped from the cache (optional operation) */ 
-    public void setDropHandler(Action<T> dropHandler) ;
+    public void setDropHandler(Consumer<T> dropHandler) ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/Closeable.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Closeable.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Closeable.java
index 2b6002a..e2f6dfd 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Closeable.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/Closeable.java
@@ -21,7 +21,7 @@ package org.apache.jena.atlas.lib;
 /** Close this object.
  *  This form does not allow Exceptions (it does allow RuntimeExceptions).  
  */
-public interface Closeable
+public interface Closeable extends java.io.Closeable
 {
     public void close() ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/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 8bae6a4..759e543 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,34 +19,16 @@
 package org.apache.jena.atlas.lib;
 
 import java.util.Collection ;
-import java.util.Iterator ;
+import java.util.Objects;
 
 public class CollectionUtils
 {
     static public <T> void removeNulls(Collection<T> list)
-    {
-        for ( Iterator<T> iter = list.iterator() ; iter.hasNext() ; )
-        {
-            T e = iter.next() ;
-            if ( e == null )
-                iter.remove() ;
-        }
+    {	
+    		list.removeIf(Objects::isNull);
     }
     
     static public <T> boolean disjoint(Collection<T> c1, Collection<T> c2)
     {
-        if ( c2.size() < c1.size() )
-        {
-            Collection<T> t = c1 ;
-            c1 = c2 ;
-            c2 = t ;
-        }
-        
-        for ( T t : c1 )
-        {
-            if ( c2.contains(t) )
-                return false ;
-        }
-        return true ;
-    }
+		return c1.stream().noneMatch(c2::contains);
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/Lib.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Lib.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Lib.java
index 6c9c442..a866d59 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Lib.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/Lib.java
@@ -24,6 +24,7 @@ import java.util.zip.CRC32 ;
 import java.util.zip.Checksum ;
 
 import org.apache.jena.atlas.logging.Log ;
+import org.apache.jena.ext.com.google.common.base.Objects;
 
 public class Lib
 {
@@ -35,15 +36,13 @@ public class Lib
             ((Sync)object).sync() ;
     }
     
-    /** Return true if obj1 and obj are both null or are .equals, else return false */
+    /** Return true if obj1 and obj are both null or are .equals, else return false 
+     * Prefer {@link Objects#equal(Object, Object)}
+     */
+    @Deprecated
     public static final <T> boolean equal(T obj1, T obj2)
     {
-        if ( obj1 == null )
-            return obj2 == null ;
-        // obj1 != null
-        if ( obj2 == null )
-            return false ;
-        return obj1.equals(obj2) ;
+    		return Objects.equal(obj1, obj2);
     }
     
     /** Return true if obj1 and obj are both null or are .equals, else return false */

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/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 78d591a..8315236 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
@@ -20,10 +20,9 @@ package org.apache.jena.atlas.lib;
 
 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.Action ;
 import org.apache.jena.atlas.iterator.FilterUnique ;
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.logging.Log ;
@@ -101,10 +100,10 @@ public class ListUtils
     
     public static <T> void print(final IndentedWriter out, List<T> list, final String sep)
     {
-        Action<T> output = new Action<T>() {
+        Consumer<T> output = new Consumer<T>() {
             boolean first = true ;
             @Override
-            public void apply(T item)
+            public void accept(T item)
             {
                 if ( ! first ) out.print(sep) ;
                 out.print(item.toString()) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/MapUtils.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/MapUtils.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/MapUtils.java
deleted file mode 100644
index 7999a25..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/MapUtils.java
+++ /dev/null
@@ -1,45 +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.Map ;
-
-/** Map specific functions */
-public class MapUtils
-{
-    private MapUtils() {}
-    
-    public static <K, V> void apply(Map<K, V> map, ActionKeyValue<K, V> action)
-    {
-        for ( Map.Entry<K,V> entry : map.entrySet() )
-            action.apply(entry.getKey(), entry.getValue()) ;
-    }
-    
-    public static <T> void increment(Map<T, Integer> countMap, T key)
-    { increment(countMap, key, 1) ; }
-    
-    public static <T> void increment(Map<T, Integer> countMap, T key, int incr)
-    {
-        Integer integer = countMap.get(key) ;
-        if ( integer == null ) 
-            countMap.put(key, incr) ;
-        else
-            countMap.put(key, integer+incr) ;
-    }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/Problem.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/Problem.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/Problem.java
deleted file mode 100644
index d571fe7..0000000
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/Problem.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;
-
-public class Problem extends RuntimeException
-{
-    public Problem(String msg) { super(msg) ; }
-    public Problem(String msg, Throwable th) { super(msg, th) ; }
-}

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/SetUtils.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/SetUtils.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/SetUtils.java
index f4e561d..5cc65a9 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/SetUtils.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/SetUtils.java
@@ -38,12 +38,7 @@ public class SetUtils
 
     public static <T> boolean intersectionP(Set<? extends T> s1, Set<? extends T> s2)
     {
-        for( T elt : s1 )
-        {
-            if ( s2.contains(elt) ) 
-                return true ;
-        }
-        return false ;
+    		return s1.stream().anyMatch(s2::contains);
     }
 
     public static <T> Set<T> union(Set<? extends T> s1, Set<? extends T> s2)
@@ -61,24 +56,5 @@ public class SetUtils
         s3.removeAll(s2) ;
         return s3 ;
     }
-    
-    /** Return true if s1 and s2 are disjoint */
-    public static <T> boolean isDisjoint(Set<? extends T> s1, Set<? extends T> s2)
-    {
-        Set<? extends T> x = s1 ;
-        Set<? extends T> y = s2 ;
-        if ( s1.size() < s2.size() )
-        {
-            x = s2 ;
-            y = s1 ;
-        }        
-        
-        for ( T item : x )
-        {
-            if ( y.contains(item)) 
-                return false ;
-        }
-        return true ;
-    }
 }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/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 ae944a7..35a97a5 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,10 +21,9 @@ package org.apache.jena.atlas.lib ;
 import java.util.Arrays ;
 import java.util.Iterator ;
 import java.util.List ;
+import java.util.function.Function;
 
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.IteratorArray ;
-import org.apache.jena.atlas.iterator.Transform ;
 
 /** Tuple class - tuples are immutable and must be created initialized */
 public class Tuple<T> implements Iterable<T> {
@@ -48,22 +47,13 @@ public class Tuple<T> implements Iterable<T> {
 
     // TupleLib??
     public static <T> Iterator<T> project(final int slot, Iterator<Tuple<T>> iter) {
-        Transform<Tuple<T>, T> projection = new Transform<Tuple<T>, T>() {
-            @Override
-            public T convert(Tuple<T> tuple) {
-                return tuple.get(slot) ;
-            }
-        } ;
-        return Iter.map(iter, projection) ;
+        return Iter.map(iter, t -> t.get(slot)) ;
     }
 
     public static <T> Iterator<Tuple<T>> prefix(final int prefixLength, Iterator<Tuple<T>> iter) {
-        Transform<Tuple<T>, Tuple<T>> sub = new Transform<Tuple<T>, Tuple<T>>() {
-            @Override
-            public Tuple<T> convert(Tuple<T> tuple) {
-                T[] x = ArrayUtils.copy(tuple.tuple, 0, prefixLength) ;
-                return Tuple.create(x) ;
-            }
+        Function<Tuple<T>, Tuple<T>> sub = t -> {
+                T[] x = ArrayUtils.copy(t.tuple, 0, prefixLength) ;
+                return Tuple.create(x) ;    
         } ;
         return Iter.map(iter, sub) ;
     }
@@ -100,7 +90,7 @@ public class Tuple<T> implements Iterable<T> {
 
     @Override
     public Iterator<T> iterator() {
-        return IteratorArray.create(tuple) ;
+        return Arrays.stream(tuple).iterator() ;
     }
 
     /** Return a tuple with the column mapping applied */

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache0.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache0.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache0.java
index 00befa0..5b8b5cc 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache0.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache0.java
@@ -20,9 +20,9 @@ package org.apache.jena.atlas.lib.cache ;
 
 import java.util.Iterator ;
 import java.util.concurrent.Callable ;
+import java.util.function.BiConsumer;
 
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.lib.ActionKeyValue ;
 import org.apache.jena.atlas.lib.Cache ;
 
 /** A cache that keeps nothing */
@@ -67,6 +67,6 @@ public final class Cache0<K, V> implements Cache<K, V> {
     }
 
     @Override
-    public void setDropHandler(ActionKeyValue<K, V> dropHandler) {}
+    public void setDropHandler(BiConsumer<K, V> dropHandler) {}
 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache1.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache1.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache1.java
index 38ab5c6..ffa6e0a 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache1.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/Cache1.java
@@ -20,16 +20,16 @@ package org.apache.jena.atlas.lib.cache;
 
 import java.util.Iterator ;
 import java.util.concurrent.Callable ;
+import java.util.function.BiConsumer;
 
 import org.apache.jena.atlas.iterator.SingletonIterator ;
-import org.apache.jena.atlas.lib.ActionKeyValue ;
 import org.apache.jena.atlas.lib.Cache ;
 import org.apache.jena.atlas.lib.Lib ;
 
 /** A one-slot cache.*/
 public class Cache1<K, V> implements Cache<K,V>
 {
-    private ActionKeyValue<K, V> dropHandler = null ;
+    private BiConsumer<K, V> dropHandler = null ;
     private K cacheKey ;
     private V cacheValue ;
     
@@ -107,7 +107,7 @@ public class Cache1<K, V> implements Cache<K,V>
     }
 
     @Override
-    public void setDropHandler(ActionKeyValue<K, V> dropHandler)
+    public void setDropHandler(BiConsumer<K, V> dropHandler)
     {
         this.dropHandler = dropHandler ;
     }
@@ -115,7 +115,7 @@ public class Cache1<K, V> implements Cache<K,V>
     private void notifyDrop(K key, V thing)
     {
         if ( dropHandler != null && key != null )
-            dropHandler.apply(key, thing) ;
+            dropHandler.accept(key, thing) ;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheGuava.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheGuava.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheGuava.java
index fd5959c..a25faa0 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheGuava.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheGuava.java
@@ -21,11 +21,10 @@ package org.apache.jena.atlas.lib.cache;
 import java.util.Iterator ;
 import java.util.concurrent.Callable ;
 import java.util.concurrent.ExecutionException ;
+import java.util.function.BiConsumer;
 
-import org.apache.jena.atlas.lib.ActionKeyValue ;
 import org.apache.jena.atlas.lib.Cache ;
 import org.apache.jena.atlas.logging.Log ;
-
 import org.apache.jena.ext.com.google.common.cache.CacheBuilder ;
 import org.apache.jena.ext.com.google.common.cache.RemovalListener ;
 import org.apache.jena.ext.com.google.common.cache.RemovalNotification ;
@@ -34,7 +33,7 @@ import org.apache.jena.ext.com.google.common.cache.RemovalNotification ;
 final
 public class CacheGuava<K,V> implements Cache<K, V>
 {
-    private ActionKeyValue<K, V> dropHandler = null ;
+    private BiConsumer<K, V> dropHandler = null ;
     /*private*/ org.apache.jena.ext.com.google.common.cache.Cache<K,V> cache ;
 
     public CacheGuava(int size)
@@ -43,7 +42,7 @@ public class CacheGuava<K,V> implements Cache<K, V>
             @Override
             public void onRemoval(RemovalNotification<K, V> notification) {
                 if ( dropHandler != null )
-                    dropHandler.apply(notification.getKey(),
+                    dropHandler.accept(notification.getKey(),
                                       notification.getValue()) ;
             }
         } ;
@@ -112,7 +111,7 @@ public class CacheGuava<K,V> implements Cache<K, V>
     }
 
     @Override
-    public void setDropHandler(ActionKeyValue<K, V> dropHandler) {
+    public void setDropHandler(BiConsumer<K, V> dropHandler) {
         this.dropHandler = dropHandler ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetImpl.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetImpl.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetImpl.java
index b3bf048..8a24d26 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetImpl.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetImpl.java
@@ -19,9 +19,9 @@
 package org.apache.jena.atlas.lib.cache ;
 
 import java.util.Iterator ;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
 
-import org.apache.jena.atlas.iterator.Action ;
-import org.apache.jena.atlas.lib.ActionKeyValue ;
 import org.apache.jena.atlas.lib.Cache ;
 import org.apache.jena.atlas.lib.CacheSet ;
 
@@ -37,21 +37,21 @@ public class CacheSetImpl<T> implements CacheSet<T> {
 
     /** Callback for entries when dropped from the cache */
     @Override
-    public void setDropHandler(Action<T> dropHandler) {
+    public void setDropHandler(Consumer<T> dropHandler) {
         cacheMap.setDropHandler(new Wrapper<T>(dropHandler)) ;
     }
     
     // From map action to set action.
-    static class Wrapper<T> implements ActionKeyValue<T, Object> {
-        Action<T> dropHandler ;
+    static class Wrapper<T> implements BiConsumer<T, Object> {
+        Consumer<T> dropHandler ;
 
-        public Wrapper(Action<T> dropHandler) {
+        public Wrapper(Consumer<T> dropHandler) {
             this.dropHandler = dropHandler ;
         }
 
         @Override
-        public void apply(T key, Object value) {
-            dropHandler.apply(key) ;
+        public void accept(T key, Object value) {
+            dropHandler.accept(key) ;
         }
 
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetSync.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetSync.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetSync.java
index fc3a3bd..8fdda11 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetSync.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetSync.java
@@ -18,7 +18,8 @@
 
 package org.apache.jena.atlas.lib.cache ;
 
-import org.apache.jena.atlas.iterator.Action ;
+import java.util.function.Consumer;
+
 import org.apache.jena.atlas.lib.CacheSet ;
 
 public class CacheSetSync<T> implements CacheSet<T> {
@@ -59,7 +60,7 @@ public class CacheSetSync<T> implements CacheSet<T> {
     }
 
     @Override
-    synchronized public void setDropHandler(Action<T> dropHandler) {
+    synchronized public void setDropHandler(Consumer<T> dropHandler) {
         cache.setDropHandler(dropHandler) ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetWrapper.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetWrapper.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetWrapper.java
index c11ffb0..3a36c97 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetWrapper.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSetWrapper.java
@@ -18,7 +18,8 @@
 
 package org.apache.jena.atlas.lib.cache ;
 
-import org.apache.jena.atlas.iterator.Action ;
+import java.util.function.Consumer;
+
 import org.apache.jena.atlas.lib.CacheSet ;
 
 public class CacheSetWrapper<T> implements CacheSet<T> {
@@ -59,7 +60,7 @@ public class CacheSetWrapper<T> implements CacheSet<T> {
     }
 
     @Override
-    public void setDropHandler(Action<T> dropHandler) {
+    public void setDropHandler(Consumer<T> dropHandler) {
         cache.setDropHandler(dropHandler) ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java
index a33d8e2..9f889dd 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java
@@ -18,13 +18,14 @@
 
 package org.apache.jena.atlas.lib.cache;
 
+import static java.util.Arrays.asList;
+
 import java.util.Arrays ;
 import java.util.Iterator ;
 import java.util.concurrent.Callable ;
+import java.util.function.BiConsumer;
 
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.IteratorArray ;
-import org.apache.jena.atlas.lib.ActionKeyValue ;
 import org.apache.jena.atlas.lib.Cache ;
 
 
@@ -40,7 +41,7 @@ public class CacheSimple<K,V> implements Cache<K,V>
     private final K[] keys ;
     private final int size ;
     private int currentSize = 0 ;
-    private ActionKeyValue<K,V> dropHandler = null ;
+    private BiConsumer<K,V> dropHandler = null ;
     
     public CacheSimple(int size)
     { 
@@ -113,7 +114,7 @@ public class CacheSimple<K,V> implements Cache<K,V>
             // Drop the old K->V
             old = values[x] ;
             if ( dropHandler != null )
-                dropHandler.apply(keys[x], old) ;
+                dropHandler.accept(keys[x], old) ;
             currentSize-- ;
         }
         
@@ -142,7 +143,7 @@ public class CacheSimple<K,V> implements Cache<K,V>
     @Override
     public Iterator<K> keys()
     {
-        Iterator<K> iter = IteratorArray.create(keys) ;
+        Iterator<K> iter = asList(keys).iterator() ;
         return Iter.removeNulls(iter) ;
     }
 
@@ -154,7 +155,7 @@ public class CacheSimple<K,V> implements Cache<K,V>
 
     /** Callback for entries when dropped from the cache */
     @Override
-    public void setDropHandler(ActionKeyValue<K,V> dropHandler)
+    public void setDropHandler(BiConsumer<K,V> dropHandler)
     {
         this.dropHandler = dropHandler ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheWrapper.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheWrapper.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheWrapper.java
index e655749..ef27228 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheWrapper.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheWrapper.java
@@ -19,8 +19,8 @@
 package org.apache.jena.atlas.lib.cache;
 import java.util.Iterator ;
 import java.util.concurrent.Callable ;
+import java.util.function.BiConsumer;
 
-import org.apache.jena.atlas.lib.ActionKeyValue ;
 import org.apache.jena.atlas.lib.Cache ;
 
 
@@ -56,7 +56,7 @@ public class CacheWrapper<Key,T> implements Cache<Key,T>
     public void remove(Key key)                     { cache.remove(key) ; }
 
     @Override
-    public void setDropHandler(ActionKeyValue<Key, T> dropHandler)
+    public void setDropHandler(BiConsumer<Key, T> dropHandler)
     { cache.setDropHandler(dropHandler) ; }
 
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/main/java/org/apache/jena/base/Closeable.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/base/Closeable.java b/jena-base/src/main/java/org/apache/jena/base/Closeable.java
deleted file mode 100644
index 59a06aa..0000000
--- a/jena-base/src/main/java/org/apache/jena/base/Closeable.java
+++ /dev/null
@@ -1,27 +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.base;
-
-/** Close this object.
- *  This form does not allow Exceptions (it does allow RuntimeExceptions)  
- */
-public interface Closeable {
-    public void close() ; 
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java
index 56cf8a9..11550a1 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/iterator/TestIter.java
@@ -26,6 +26,7 @@ import java.util.ArrayList ;
 import java.util.Arrays ;
 import java.util.Iterator ;
 import java.util.List ;
+import java.util.function.Predicate;
 
 import org.junit.Test ;
 
@@ -225,97 +226,11 @@ public class TestIter
     @Test
     public void map_01()
     {
-        Iterator<String> it = Iter.map(data2.iterator(), new Transform<String,String>()
-        {
-            @Override
-            public String convert(String item)
-            {
-                return item + item;
-            }
-        });
+        Iterator<String> it = Iter.map(data2.iterator(), item -> item + item);
         test(it, "xx", "yy", "zz");
     }
-    
-    @Test
-    public void mapMany_01()
-    {
-        Iterator<String> it = Iter.mapMany(data2.iterator(), new Transform<String,Iterator<String>>()
-        {
-            @Override
-            public Iterator<String> convert(String item)
-            {
-                List<String> l = new ArrayList<>(2);
-                l.add(item);
-                l.add(item + item);
-                return l.iterator();
-            }
-        });
-        
-        test(it, "x", "xx", "y", "yy", "z", "zz");
-    }
-    
-    @Test
-    public void mapMany_02()
-    {
-        Iterator<String> it = Iter.mapMany(data2.iterator(), new Transform<String,Iterator<String>>()
-        {
-            @Override
-            public Iterator<String> convert(String item)
-            {
-                return Iter.nullIterator() ;
-            }
-        });
-        
-        assertFalse(it.hasNext()) ;
-    }
-    
-    @Test
-    public void mapMany_03()
-    {
-        Iterator<String> it = Iter.mapMany(data2.iterator(), new Transform<String,Iterator<String>>()
-        {
-            int count = 0 ;
-            @Override
-            public Iterator<String> convert(String item)
-            {
-                count++ ;
-                if ( count%2 == 1 )
-                    return Iter.singleton(item) ;
-                else
-                    return Iter.nullIterator() ;
-            }
-        });
-        
-        test(it, "x", "z");
-    }
-
-    @Test
-    public void mapMany_04()
-    {
-        Iterator<String> it = Iter.mapMany(data2.iterator(), new Transform<String,Iterator<String>>()
-        {
-            int count = 0 ;
-            @Override
-            public Iterator<String> convert(String item)
-            {
-                count++ ;
-                if ( count%2 == 0 )
-                    return Iter.singleton(item) ;
-                else
-                    return Iter.nullIterator() ;
-            }
-        });
-        
-        test(it, "y");
-    }
-
 	
-    Filter<String> filter = new Filter<String>() {
-        @Override
-        public boolean accept(String item)
-        {
-            return item.length() == 1 ;
-        }} ;
+    Predicate<String> filter = item -> item.length() == 1;
    
     @Test
     public void first_01()
@@ -441,14 +356,7 @@ public class TestIter
     @Test
     public void filter_02()
     {
-        Iterator<String> it = Iter.filter(data3.iterator(), new Filter<String>()
-        {
-            @Override
-            public boolean accept(String item)
-            {
-                return "x".equals(item) || "z".equals(item) ;
-            }
-        });
+        Iterator<String> it = Iter.filter(data3.iterator(), item -> "x".equals(item) || "z".equals(item));
         
         test(it, "x", "z");
     }
@@ -456,14 +364,7 @@ public class TestIter
     @Test
     public void filter_03()
     {
-        Iterator<String> it = Iter.filter(data3.iterator(), new Filter<String>()
-        {
-            @Override
-            public boolean accept(String item)
-            {
-                return (null == item) || "x".equals(item) ;
-            }
-        });
+        Iterator<String> it = Iter.filter(data3.iterator(), item -> null == item || "x".equals(item));
         
         test(it, null, "x", null, null, null, null);
     }
@@ -496,23 +397,8 @@ public class TestIter
         test(iter, "a", "b", "a") ;
     }
     
-    private static class AlwaysAcceptFilter implements Filter<Object> {
-        @Override
-        public boolean accept(Object o) {
-            return true;
-        }
-    }
-
-    private static class NeverAcceptFilter implements Filter<Object> {
-        @Override
-        public boolean accept(Object o) {
-            return false;
-        }
-    }
-
-    
     private static class AlwaysAcceptFilterStack extends FilterStack<Object> {
-        public AlwaysAcceptFilterStack(Filter<Object> f) {
+        public AlwaysAcceptFilterStack(Predicate<Object> f) {
             super(f);
         }
 
@@ -524,16 +410,16 @@ public class TestIter
 
     @Test
     public void testFilterStack_01() {
-        Filter<Object> filter = new AlwaysAcceptFilter();
+        Predicate<Object> filter = x -> true;
         FilterStack<Object> filterStack = new AlwaysAcceptFilterStack(filter);
-        assertTrue(filterStack.accept(new Object()));
+        assertTrue(filterStack.test(new Object()));
     }
     
     @Test
     public void testFilterStack_02() {
-        Filter<Object> filter = new NeverAcceptFilter();
+        Predicate<Object> filter = x -> false;
         FilterStack<Object> filterStack = new AlwaysAcceptFilterStack(filter);
-        assertFalse(filterStack.accept(new Object()));
+        assertFalse(filterStack.test(new Object()));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/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 7ac9351..84bb858 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,10 +24,8 @@ import static org.apache.jena.fuseki.HttpNames.paramNamedGraphURI ;
 import java.util.Arrays ;
 import java.util.Collections ;
 import java.util.List ;
-
 import javax.servlet.http.HttpServletRequest ;
 
-import org.apache.jena.atlas.iterator.Filter ;
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.query.Query ;
@@ -76,17 +74,9 @@ public  abstract class SPARQL_Protocol extends SPARQL_ServletBase
 
     private static List<String> removeEmptyValues(List<String> list)
     {
-        return Iter.iter(list).filter(acceptNonEmpty).toList() ;
+        return Iter.iter(list).filter(item -> item != null && item.length() != 0).toList() ;
     }
     
-    private static Filter<String> acceptNonEmpty = new Filter<String>(){ 
-        @Override
-        public boolean accept(String item)
-        {
-            return item != null && item.length() != 0 ;
-        }
-    } ;
-    
     protected static int countParamOccurences(HttpServletRequest request, String param)
     {
         String[] x = request.getParameterValues(param) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/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 4f5d5c9..2a19d03 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
@@ -24,10 +24,10 @@ import static org.apache.jena.riot.web.HttpNames.paramNamedGraphURI ;
 import java.util.Arrays ;
 import java.util.Collections ;
 import java.util.List ;
+import java.util.function.Predicate;
 
 import javax.servlet.http.HttpServletRequest ;
 
-import org.apache.jena.atlas.iterator.Filter ;
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.query.Query ;
@@ -79,13 +79,7 @@ public  abstract class SPARQL_Protocol extends ActionSPARQL
         return Iter.iter(list).filter(acceptNonEmpty).toList() ;
     }
     
-    private static Filter<String> acceptNonEmpty = new Filter<String>(){ 
-        @Override
-        public boolean accept(String item)
-        {
-            return item != null && item.length() != 0 ;
-        }
-    } ;
+    private static Predicate<String> acceptNonEmpty = item -> item != null && item.length() != 0;
     
     protected static int countParamOccurences(HttpServletRequest request, String param)
     {

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-permissions/src/main/java/org/apache/jena/permissions/query/rewriter/SecuredFunction.java
----------------------------------------------------------------------
diff --git a/jena-permissions/src/main/java/org/apache/jena/permissions/query/rewriter/SecuredFunction.java b/jena-permissions/src/main/java/org/apache/jena/permissions/query/rewriter/SecuredFunction.java
index 6206f62..6f262a5 100644
--- a/jena-permissions/src/main/java/org/apache/jena/permissions/query/rewriter/SecuredFunction.java
+++ b/jena-permissions/src/main/java/org/apache/jena/permissions/query/rewriter/SecuredFunction.java
@@ -18,6 +18,7 @@
 package org.apache.jena.permissions.query.rewriter;
 
 import java.util.List;
+import java.util.function.Function;
 
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
@@ -30,7 +31,6 @@ import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.engine.binding.Binding ;
 import org.apache.jena.sparql.expr.* ;
 import org.apache.jena.sparql.function.FunctionEnv ;
-import org.apache.jena.sparql.graph.NodeTransform ;
 
 public class SecuredFunction extends ExprFunctionN
 {
@@ -103,7 +103,7 @@ public class SecuredFunction extends ExprFunctionN
 	}
 
 	@Override
-	public Expr applyNodeTransform( NodeTransform transform )
+	public Expr applyNodeTransform( Function<Node, Node> transform )
 	{
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/QuadBlock.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/QuadBlock.java b/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/QuadBlock.java
index 78aae0b..fdc7339 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/QuadBlock.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/QuadBlock.java
@@ -22,10 +22,10 @@ import static org.apache.jena.atlas.iterator.Iter.apply ;
 
 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.io.PrintUtils ;
-import org.apache.jena.atlas.iterator.Action ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.shared.PrefixMapping ;
 import org.apache.jena.sparql.algebra.op.OpQuadPattern ;
@@ -167,10 +167,10 @@ public class QuadBlock extends ArrayList<Quad> implements Iterable<Quad>, PrintS
     { 
         final String sep = "\n" ;
 
-        final Action<Quad> strAction = new Action<Quad>() {
+        final Consumer<Quad> strAction = new Consumer<Quad>() {
             boolean first = true ; 
             @Override
-            public void apply(Quad quad)
+            public void accept(Quad quad)
             {
                 if ( ! first )
                     out.print(sep) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/SDB_QC.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/SDB_QC.java b/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/SDB_QC.java
index 9ece0c9..c35cf6c 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/SDB_QC.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/SDB_QC.java
@@ -23,10 +23,8 @@ import static org.apache.jena.atlas.iterator.Iter.* ;
 import java.sql.SQLException;
 import java.util.List;
 import java.util.Set;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.jena.atlas.iterator.Transform;
 import org.apache.jena.query.Query ;
 import org.apache.jena.query.SortCondition ;
 import org.apache.jena.sdb.SDB ;
@@ -102,7 +100,7 @@ public class SDB_QC
         // If part query, need all variables. 
         
         // Project variables
-        List<Var> vars = toList(map(query.getResultVars().iterator(), StringToVar)) ;
+        List<Var> vars = toList(map(query.getResultVars().iterator(), Var::alloc)) ;
         
         if ( vars.size() == 0 )
         {
@@ -114,7 +112,7 @@ public class SDB_QC
             q2.setQueryPattern(query.getQueryPattern()) ;
             q2.setQuerySelectType() ;
             q2.setQueryResultStar(true) ;
-            vars = toList(map(q2.getResultVars().iterator(), StringToVar)) ;
+            vars = toList(map(q2.getResultVars().iterator(), Var::alloc)) ;
         }
         
         
@@ -146,12 +144,4 @@ public class SDB_QC
     {
         return ( x instanceof OpSQL ) ;
     }
-
-    
-    private static Transform<String, Var> StringToVar = new Transform<String, Var>(){
-        @Override
-        public Var convert(String varName)
-        {
-            return Var.alloc(varName) ;
-        }} ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/TransformSDB.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/TransformSDB.java b/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/TransformSDB.java
index 608cb6b..e2bfda6 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/TransformSDB.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/compiler/TransformSDB.java
@@ -113,12 +113,12 @@ public class TransformSDB extends TransformCopy
         
         // Find optional-on-left
         Set<ScopeEntry> scopes2 = toSet(filter(scopes.iterator(), ScopeEntry.OptionalFilter)) ;
-        Set<Var> leftOptVars = toSet(map(scopes2.iterator(), ScopeEntry.ToVar)) ;              // Vars from left optionals.
+        Set<Var> leftOptVars = toSet(map(scopes2.iterator(), ScopeEntry::getVar)) ;              // Vars from left optionals.
         
         if ( false )
         {
             Iter<ScopeEntry> iter = Iter.iter(scopes) ;
-            Set<Var> leftOptVars_ = iter.filter(ScopeEntry.OptionalFilter).map(ScopeEntry.ToVar).toSet() ;
+            Set<Var> leftOptVars_ = iter.filter(ScopeEntry.OptionalFilter).map(ScopeEntry::getVar).toSet() ;
         }
         
         // Find optional-on-right (easier - it's all variables) 

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeEntry.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeEntry.java b/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeEntry.java
index b9b1d78..0384e85 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeEntry.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeEntry.java
@@ -18,9 +18,9 @@
 
 package org.apache.jena.sdb.core;
 
-import org.apache.jena.atlas.iterator.Action ;
-import org.apache.jena.atlas.iterator.Filter ;
-import org.apache.jena.atlas.iterator.Transform ;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+
 import org.apache.jena.sdb.core.sqlexpr.SqlColumn ;
 import org.apache.jena.sparql.core.Var ;
 
@@ -30,27 +30,9 @@ public class ScopeEntry
     SqlColumn column;
     ScopeStatus status ;
     
-    public static Filter<ScopeEntry> OptionalFilter = new Filter<ScopeEntry>()
-    {
-        @Override
-        public boolean accept(ScopeEntry item)
-        { return item.getStatus() == ScopeStatus.OPTIONAL ; }
-    } ;
-    
-    public static Transform<ScopeEntry, Var> ToVar = new Transform<ScopeEntry, Var>()
-    {
-        @Override
-        public Var convert(ScopeEntry item)
-        { return item.getVar() ; } 
-    } ;
+    public static Predicate<ScopeEntry> OptionalFilter = item -> item.getStatus() == ScopeStatus.OPTIONAL;
     
-    public static Action<ScopeEntry> SetOpt = new Action<ScopeEntry>()
-    {
-        @Override
-        public void apply(ScopeEntry item)
-        { item.setStatus(ScopeStatus.OPTIONAL) ; } 
-    } ;
-
+    public static Consumer<ScopeEntry> SetOpt = item -> item.setStatus(ScopeStatus.OPTIONAL) ;
     
     public ScopeEntry(Var var, SqlColumn column)
     { this(var, column, ScopeStatus.FIXED) ; }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeRename.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeRename.java b/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeRename.java
index bc51291..2a4706a 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeRename.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/core/ScopeRename.java
@@ -22,8 +22,6 @@ import java.util.HashMap ;
 import java.util.HashSet ;
 import java.util.Map ;
 import java.util.Set ;
-
-import org.apache.jena.atlas.iterator.Transform ;
 import org.apache.jena.sdb.core.sqlexpr.SqlColumn ;
 import org.apache.jena.sparql.core.Var ;
 import org.slf4j.Logger ;
@@ -114,23 +112,4 @@ public class ScopeRename implements Scope
     {
         return frame + " " + scope ; 
     }
-    
-    private Transform<ScopeEntry, ScopeEntry> converter = 
-        new Transform<ScopeEntry, ScopeEntry>(){
-            @Override
-            public ScopeEntry convert(ScopeEntry entry)
-            {
-                entry = new ScopeEntry(entry.getVar(), entry.getColumn()) ;
-                Var var = entry.getVar() ;
-                SqlColumn col = frame.get(var) ;
-                if ( col == null )
-                {
-                    log.warn("No alias for variable "+var) ;
-                    return entry ;
-                }
-                ScopeEntry entry2 = new ScopeEntry(entry.getVar(), entry.getColumn()) ;
-                entry2.setStatus(entry.getStatus()) ;
-                //entry.reset(var, col, entry.getStatus()) ;
-                return entry2 ;
-            }} ;
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/main/java/org/apache/jena/sdb/core/sqlnode/GenerateSQLVisitor.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/core/sqlnode/GenerateSQLVisitor.java b/jena-sdb/src/main/java/org/apache/jena/sdb/core/sqlnode/GenerateSQLVisitor.java
index 489ebf8..69b242c 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/core/sqlnode/GenerateSQLVisitor.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/core/sqlnode/GenerateSQLVisitor.java
@@ -20,10 +20,8 @@ package org.apache.jena.sdb.core.sqlnode;
 
 import java.util.List ;
 import java.util.Set ;
-
 import org.apache.jena.atlas.io.IndentedWriter ;
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.Transform ;
 import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.sdb.SDB ;
 import org.apache.jena.sdb.core.Annotations ;
@@ -281,14 +279,9 @@ public class GenerateSQLVisitor implements SqlNodeVisitor
         return join2 ;
     }
     
-    static final Transform<SqlColumn, SqlTable> colToTable = new Transform<SqlColumn, SqlTable>() {
-        @Override
-        public SqlTable convert(SqlColumn item) { return item.getTable() ; }
-    } ;
-    
     private static Set<SqlTable> tables(Set<SqlColumn> cols)
     {
-        return Iter.toSet(Iter.map(cols.iterator(), colToTable)) ;
+        return Iter.toSet(Iter.map(cols.iterator(), SqlColumn::getTable)) ;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/main/java/org/apache/jena/sdb/print/ActionPrint.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/main/java/org/apache/jena/sdb/print/ActionPrint.java b/jena-sdb/src/main/java/org/apache/jena/sdb/print/ActionPrint.java
index ed1e70f..097736a 100644
--- a/jena-sdb/src/main/java/org/apache/jena/sdb/print/ActionPrint.java
+++ b/jena-sdb/src/main/java/org/apache/jena/sdb/print/ActionPrint.java
@@ -18,11 +18,12 @@
 
 package org.apache.jena.sdb.print;
 
+import java.util.function.Consumer;
+
 import org.apache.jena.atlas.io.IndentedWriter ;
 import org.apache.jena.atlas.io.Printable ;
-import org.apache.jena.atlas.iterator.Action ;
 
-public class ActionPrint <T extends Printable> implements Action<T> 
+public class ActionPrint <T extends Printable> implements Consumer<T> 
 {
     private boolean first = true ;
     private IndentedWriter out ;
@@ -32,7 +33,7 @@ public class ActionPrint <T extends Printable> implements Action<T>
     public ActionPrint(IndentedWriter out) { this(out, " ") ; }
     
     @Override
-    public void apply(Printable item)
+    public void accept(Printable item)
     {
         if ( ! first && sep != null )
             out.print(sep) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStoreDesc.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStoreDesc.java b/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStoreDesc.java
index 751e597..9648f6f 100644
--- a/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStoreDesc.java
+++ b/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStoreDesc.java
@@ -21,10 +21,8 @@ package org.apache.jena.sdb.test.junit;
 import java.util.ArrayList ;
 import java.util.Collection ;
 import java.util.List ;
-
 import org.junit.runners.Parameterized.Parameters ;
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.Transform ;
 import org.apache.jena.sdb.StoreDesc ;
 import org.apache.jena.sdb.test.SDBTestSetup ;
 import org.apache.jena.sdb.util.Pair ;
@@ -32,13 +30,6 @@ import org.apache.jena.sdb.util.Pair ;
 //@RunWith(Parameterized.class)
 public abstract class ParamAllStoreDesc
 {
-    // Make into Object[]{String,Store} lists just for JUnit. 
-    static Transform<Pair<String, StoreDesc>, Object[]> fix = new Transform<Pair<String, StoreDesc>, Object[]>()
-    {
-        @Override
-        public Object[] convert(Pair<String, StoreDesc> item)
-        { return new Object[]{item.car(), item.cdr()} ; }
-    } ;
 
     // Build once and return the same for parametrized types each time.
     // Connections are slow to create.
@@ -48,7 +39,7 @@ public abstract class ParamAllStoreDesc
         List<Pair<String, StoreDesc>> x = new ArrayList<Pair<String, StoreDesc>>() ;
         x.addAll(StoreList.storeDesc(SDBTestSetup.storeList)) ;
         x.addAll(StoreList.storeDesc(SDBTestSetup.storeListSimple)) ;
-        data = Iter.iter(x).map(fix).toList() ;
+        data = Iter.iter(x).map(p -> new Object[]{p.car(), p.cdr()}).toList() ;
     }
     
     // ----

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStores.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStores.java b/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStores.java
index 46bb959..4e0a709 100644
--- a/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStores.java
+++ b/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/ParamAllStores.java
@@ -21,10 +21,8 @@ package org.apache.jena.sdb.test.junit;
 import java.util.ArrayList ;
 import java.util.Collection ;
 import java.util.List ;
-
 import org.junit.runners.Parameterized.Parameters ;
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.Transform ;
 import org.apache.jena.sdb.Store ;
 import org.apache.jena.sdb.StoreDesc ;
 import org.apache.jena.sdb.test.SDBTestSetup ;
@@ -33,13 +31,6 @@ import org.apache.jena.sdb.util.Pair ;
 //@RunWith(Parameterized.class)
 public abstract class ParamAllStores
 {
-    // Make into Object[]{String,Store} lists just for JUnit. 
-    static Transform<Pair<String, StoreDesc>, Object[]> fix = new Transform<Pair<String, StoreDesc>, Object[]>()
-    {
-        @Override
-        public Object[] convert(Pair<String, StoreDesc> item)
-        { return new Object[]{item.car(), item.cdr()} ; }
-    } ;
 
     // Build once and return the same for parametrized types each time.
     // Connections are slow to create.
@@ -49,7 +40,7 @@ public abstract class ParamAllStores
         List<Pair<String, StoreDesc>> x = new ArrayList<Pair<String, StoreDesc>>() ;
         x.addAll(StoreList.stores(SDBTestSetup.storeList)) ;
         x.addAll(StoreList.stores(SDBTestSetup.storeListSimple)) ;
-        data = Iter.iter(x).map(fix).toList() ;
+        data = Iter.iter(x).map(p -> new Object[]{p.car(), p.cdr()}).toList() ;
     }
     
     // ----

http://git-wip-us.apache.org/repos/asf/jena/blob/6b475345/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/StoreList.java
----------------------------------------------------------------------
diff --git a/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/StoreList.java b/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/StoreList.java
index 8739689..af5f6c8 100644
--- a/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/StoreList.java
+++ b/jena-sdb/src/test/java/org/apache/jena/sdb/test/junit/StoreList.java
@@ -22,9 +22,9 @@ import static org.apache.jena.atlas.lib.StrUtils.strjoinNL ;
 
 import java.util.ArrayList ;
 import java.util.List ;
+import java.util.function.Function;
 
 import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.iterator.Transform ;
 import org.apache.jena.query.* ;
 import org.apache.jena.rdf.model.Model ;
 import org.apache.jena.rdf.model.Property ;
@@ -57,24 +57,9 @@ public class StoreList
             "}") ;
     
     // Not Java's finest hour ...
-    static Transform<Pair<String, String>, Pair<String, StoreDesc>> t1 = new  Transform<Pair<String, String>, Pair<String, StoreDesc>>()
-    {
-        @Override
-        public Pair<String, StoreDesc> convert(Pair<String, String> pair)
-        {
-            return new Pair<String, StoreDesc>(pair.car(), StoreDesc.read(pair.cdr())) ;
-        }
-    } ;
+    static Function<Pair<String, String>, Pair<String, StoreDesc>> t1 = p -> new Pair<String, StoreDesc>(p.car(), StoreDesc.read(p.cdr()));
 
-    static Transform<Pair<String, StoreDesc>, Pair<String, Store>> t2 = new Transform<Pair<String, StoreDesc>, Pair<String, Store>>()
-    {
-        @Override
-        public Pair<String, Store> convert(Pair<String, StoreDesc> pair)
-        {
-            Store store = testStore(pair.cdr()) ;
-            return new Pair<String, Store>(pair.car(), store) ;
-        }
-    } ;
+    static Function<Pair<String, StoreDesc>, Pair<String, Store>> t2 = p -> new Pair<String, Store>(p.car(), testStore(p.cdr()));
     
     public static Store testStore(StoreDesc desc)
     {