You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/04/17 18:08:38 UTC

[26/50] [abbrv] zest-qi4j git commit: Removed Function, Function2 and Specification and replaced with the equivalents in JDK, Function, BiFunction and Predicate.

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/functional/src/main/java/org/qi4j/functional/Specifications.java
----------------------------------------------------------------------
diff --git a/core/functional/src/main/java/org/qi4j/functional/Specifications.java b/core/functional/src/main/java/org/qi4j/functional/Specifications.java
index 7635579..9ff72ad 100644
--- a/core/functional/src/main/java/org/qi4j/functional/Specifications.java
+++ b/core/functional/src/main/java/org/qi4j/functional/Specifications.java
@@ -13,127 +13,104 @@
  */
 package org.qi4j.functional;
 
+import java.util.function.Function;
+import java.util.function.Predicate;
+
 /**
  * Common generic specification expressions
  */
 public class Specifications
 {
-    public static <T> Specification<T> TRUE()
+    public static <T> Predicate<T> TRUE()
     {
-        return new Specification<T>()
-        {
-            @Override
-            public boolean satisfiedBy( T instance )
-            {
-                return true;
-            }
-        };
+        return instance -> true;
     }
 
-    public static <T> Specification<T> not( final Specification<T> specification )
+    public static <T> Predicate<T> not( final Predicate<T> specification )
     {
-        return new Specification<T>()
+        return new Predicate<T>()
         {
             @Override
-            public boolean satisfiedBy( T instance )
+            public boolean test( T instance )
             {
-                return !specification.satisfiedBy( instance );
+                return !specification.test( instance );
             }
         };
     }
 
     @SafeVarargs
-    public static <T> AndSpecification<T> and( final Specification<T>... specifications )
+    public static <T> AndSpecification<T> and( final Predicate<T>... specifications )
     {
         return and( Iterables.iterable( specifications ) );
     }
 
-    public static <T> AndSpecification<T> and( final Iterable<Specification<T>> specifications )
+    public static <T> AndSpecification<T> and( final Iterable<Predicate<T>> specifications )
     {
         return new AndSpecification<>( specifications );
     }
 
     @SafeVarargs
-    public static <T> OrSpecification<T> or( final Specification<T>... specifications )
+    public static <T> OrSpecification<T> or( final Predicate<T>... specifications )
     {
         return or( Iterables.iterable( specifications ) );
     }
 
-    public static <T> OrSpecification<T> or( final Iterable<Specification<T>> specifications )
+    public static <T> OrSpecification<T> or( final Iterable<Predicate<T>> specifications )
     {
         return new OrSpecification<>( specifications );
     }
 
     @SafeVarargs
-    public static <T> Specification<T> in( final T... allowed )
+    public static <T> Predicate<T> in( final T... allowed )
     {
         return in( Iterables.iterable( allowed ) );
     }
 
-    public static <T> Specification<T> in( final Iterable<T> allowed )
+    public static <T> Predicate<T> in( final Iterable<T> allowed )
     {
-        return new Specification<T>()
-        {
-            @Override
-            public boolean satisfiedBy( T item )
+        return item -> {
+            for( T allow : allowed )
             {
-                for( T allow : allowed )
+                if( allow.equals( item ) )
                 {
-                    if( allow.equals( item ) )
-                    {
-                        return true;
-                    }
+                    return true;
                 }
-                return false;
             }
+            return false;
         };
     }
 
-    public static <T> Specification<T> notNull()
+    public static <T> Predicate<T> notNull()
     {
-        return new Specification<T>()
-        {
-            @Override
-            public boolean satisfiedBy( T item )
-            {
-                return item != null;
-            }
-        };
+        return item -> item != null;
     }
 
-    public static <FROM, TO> Specification<FROM> translate( final Function<FROM, TO> function,
-                                                            final Specification<? super TO> specification
+    public static <FROM, TO> Predicate<FROM> translate( final Function<FROM, TO> function,
+                                                            final Predicate<? super TO> specification
     )
     {
-        return new Specification<FROM>()
-        {
-            @Override
-            public boolean satisfiedBy( FROM item )
-            {
-                return specification.satisfiedBy( function.map( item ) );
-            }
-        };
+        return item -> specification.test( function.apply( item ) );
     }
 
     /**
      * AND Specification.
      */
     public static class AndSpecification<T>
-        implements Specification<T>
+        implements Predicate<T>
     {
-        private final Iterable<Specification<T>> specifications;
+        private final Iterable<Predicate<T>> specifications;
 
-        private AndSpecification( Iterable<Specification<T>> specifications )
+        private AndSpecification( Iterable<Predicate<T>> specifications )
         {
             this.specifications = specifications;
         }
 
         @Override
-        public boolean satisfiedBy( T instance )
+        public boolean test( T instance )
         {
-            for( Specification<T> specification : specifications )
+            for( Predicate<T> specification : specifications )
             {
-                if( !specification.satisfiedBy( instance ) )
+                if( !specification.test( instance ) )
                 {
                     return false;
                 }
@@ -143,15 +120,15 @@ public class Specifications
         }
 
         @SafeVarargs
-        public final AndSpecification<T> and( Specification<T>... specifications )
+        public final AndSpecification<T> and( Predicate<T>... specifications )
         {
-            Iterable<Specification<T>> iterable = Iterables.iterable( specifications );
-            Iterable<Specification<T>> flatten = Iterables.flatten( this.specifications, iterable );
+            Iterable<Predicate<T>> iterable = Iterables.iterable( specifications );
+            Iterable<Predicate<T>> flatten = Iterables.flatten( this.specifications, iterable );
             return Specifications.and( flatten );
         }
 
         @SafeVarargs
-        public final OrSpecification<T> or( Specification<T>... specifications )
+        public final OrSpecification<T> or( Predicate<T>... specifications )
         {
             return Specifications.or( Iterables.prepend( this, Iterables.iterable( specifications ) ) );
         }
@@ -161,21 +138,21 @@ public class Specifications
      * OR Specification.
      */
     public static class OrSpecification<T>
-        implements Specification<T>
+        implements Predicate<T>
     {
-        private final Iterable<Specification<T>> specifications;
+        private final Iterable<Predicate<T>> specifications;
 
-        private OrSpecification( Iterable<Specification<T>> specifications )
+        private OrSpecification( Iterable<Predicate<T>> specifications )
         {
             this.specifications = specifications;
         }
 
         @Override
-        public boolean satisfiedBy( T instance )
+        public boolean test( T instance )
         {
-            for( Specification<T> specification : specifications )
+            for( Predicate<T> specification : specifications )
             {
-                if( specification.satisfiedBy( instance ) )
+                if( specification.test( instance ) )
                 {
                     return true;
                 }
@@ -185,16 +162,16 @@ public class Specifications
         }
 
         @SafeVarargs
-        public final AndSpecification<T> and( Specification<T>... specifications )
+        public final AndSpecification<T> and( Predicate<T>... specifications )
         {
             return Specifications.and( Iterables.prepend( this, Iterables.iterable( specifications ) ) );
         }
 
         @SafeVarargs
-        public final OrSpecification<T> or( Specification<T>... specifications )
+        public final OrSpecification<T> or( Predicate<T>... specifications )
         {
-            Iterable<Specification<T>> iterable = Iterables.iterable( specifications );
-            Iterable<Specification<T>> flatten = Iterables.flatten( this.specifications, iterable );
+            Iterable<Predicate<T>> iterable = Iterables.iterable( specifications );
+            Iterable<Predicate<T>> flatten = Iterables.flatten( this.specifications, iterable );
             return Specifications.or( flatten );
         }
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/functional/src/test/java/org/qi4j/functional/FunctionsTest.java
----------------------------------------------------------------------
diff --git a/core/functional/src/test/java/org/qi4j/functional/FunctionsTest.java b/core/functional/src/test/java/org/qi4j/functional/FunctionsTest.java
deleted file mode 100644
index 5f13459..0000000
--- a/core/functional/src/test/java/org/qi4j/functional/FunctionsTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.qi4j.functional;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
-import static org.qi4j.functional.ForEach.forEach;
-import static org.qi4j.functional.Functions.compose;
-import static org.qi4j.functional.Functions.count;
-import static org.qi4j.functional.Functions.indexOf;
-import static org.qi4j.functional.Functions.intSum;
-import static org.qi4j.functional.Functions.longSum;
-import static org.qi4j.functional.Iterables.iterable;
-import static org.qi4j.functional.Iterables.last;
-import static org.qi4j.functional.Iterables.map;
-import static org.qi4j.functional.Specifications.in;
-
-/**
- * Test of utility functions
- */
-public class FunctionsTest
-{
-    Function<Object, String> stringifier = new Function<Object, String>()
-    {
-        @Override
-        public String map( Object s )
-        {
-            return s.toString();
-        }
-    };
-
-    Function<String, Integer> length = new Function<String, Integer>()
-    {
-        @Override
-        public Integer map( String s )
-        {
-            return s.length();
-        }
-    };
-
-    @Test
-    public void testCompose()
-    {
-        assertThat( Functions.<Object, String, Integer>compose()
-                        .map( length, stringifier )
-                        .map( 12345L ), equalTo( 5 ) );
-        assertThat( compose( length, stringifier ).map( 12345L ), equalTo( 5 ) );
-    }
-
-    @Test
-    public void testFromMap()
-    {
-        Map<String, String> map = new HashMap<String, String>();
-        map.put( "A", "1" );
-        map.put( "B", "2" );
-        map.put( "C", "3" );
-        assertThat( Iterables.toList( Iterables.filter( Specifications.notNull(), Iterables.map( Functions.fromMap( map ), Iterables
-            .iterable( "A", "B", "D" ) ) ) ).toString(), equalTo( "[1, 2]" ) );
-    }
-
-    @Test
-    public void testWithDefault()
-    {
-        assertThat( Iterables.toList( Iterables.map( Functions.withDefault( "DEFAULT" ), Iterables.iterable( "123", null, "456" ) ) )
-                        .toString(), equalTo( "[123, DEFAULT, 456]" ) );
-    }
-
-    @Test
-    public void testLongSum()
-    {
-        assertThat( last( map( longSum(), iterable( 1, 2L, 3F, 4D ) ) ), equalTo( 10L ) );
-    }
-
-    @Test
-    public void testLongSum2()
-    {
-        assertThat( forEach( iterable( 1, 2, 3, 4 ) ).map( longSum() ).last(), equalTo( 10L ) );
-    }
-
-    @Test
-    public void testIntSum()
-    {
-        assertThat( last( map( intSum(), iterable( 1, 2L, 3F, 4D ) ) ), equalTo( 10 ) );
-    }
-
-    @Test
-    public void testCount()
-    {
-        assertThat( last( map( count( in( "X" ) ), iterable( "X", "Y", "X", "X", "Y" ) ) ), equalTo( 3 ) );
-    }
-
-    @Test
-    public void testIndexOf()
-    {
-        assertThat( last( map( indexOf( in( "D" ) ), iterable( "A", "B", "C", "D", "D" ) ) ), equalTo( 3 ) );
-    }
-
-    @Test
-    public void testIndexOf2()
-    {
-        assertThat( indexOf( "D", iterable( "A", "B", "C", "D", "D" ) ), equalTo( 3 ) );
-    }
-
-    @Test
-    public void testComparator()
-    {
-        Comparator<Integer> comparator = Functions.comparator( new Function<Integer, Comparable>()
-        {
-            @Override
-            public Comparable map( Integer integer )
-            {
-                return integer.toString();
-            }
-        } );
-        Iterable<Integer> iterable = Iterables.iterable( 1, 5, 3, 6, 8 );
-        List<Integer> integers = Iterables.toList( iterable );
-        Collections.sort( integers, comparator );
-        assertThat( integers.toString(), equalTo( "[1, 3, 5, 6, 8]" ) );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/functional/src/test/java/org/qi4j/functional/IntegerRangeSpecificationTest.java
----------------------------------------------------------------------
diff --git a/core/functional/src/test/java/org/qi4j/functional/IntegerRangeSpecificationTest.java b/core/functional/src/test/java/org/qi4j/functional/IntegerRangeSpecificationTest.java
deleted file mode 100644
index d29b24b..0000000
--- a/core/functional/src/test/java/org/qi4j/functional/IntegerRangeSpecificationTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2012, Niclas Hedhman. All Rights Reserved.
- *
- * Licensed 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.qi4j.functional;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-// This test exist primarily for the documentation. Don't remove.
-public class IntegerRangeSpecificationTest
-{
-    @Test
-    public void test1()
-    {
-        Specification<Integer> spec = new IntegerRangeSpecification( 10, 12 );
-        assertTrue( spec.satisfiedBy( 10 ) );
-        assertTrue( spec.satisfiedBy( 11 ) );
-        assertTrue( spec.satisfiedBy( 12 ) );
-        assertFalse( spec.satisfiedBy( 9 ) );
-        assertFalse( spec.satisfiedBy( 13 ) );
-    }
-
-    // START SNIPPET: specification
-    public static class IntegerRangeSpecification
-        implements Specification<Integer>
-    {
-
-        private int lower;
-        private int higher;
-
-        public IntegerRangeSpecification( int lower, int higher )
-        {
-            this.lower = lower;
-            this.higher = higher;
-        }
-
-        @Override
-        public boolean satisfiedBy( Integer item )
-        {
-            return item >= lower && item <= higher;
-        }
-    }
-    // END SNIPPET: specification
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/functional/src/test/java/org/qi4j/functional/IterablesTest.java
----------------------------------------------------------------------
diff --git a/core/functional/src/test/java/org/qi4j/functional/IterablesTest.java b/core/functional/src/test/java/org/qi4j/functional/IterablesTest.java
index 6aee556..ee2721c 100644
--- a/core/functional/src/test/java/org/qi4j/functional/IterablesTest.java
+++ b/core/functional/src/test/java/org/qi4j/functional/IterablesTest.java
@@ -18,6 +18,8 @@ import java.util.Collection;
 import java.util.Comparator;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import org.hamcrest.CoreMatchers;
 import org.junit.Test;
 
@@ -36,19 +38,6 @@ public class IterablesTest
     private Iterable<Integer> numberIntegers = Arrays.asList( 1, 2, 3 );
 
     @Test
-    public void testConstant()
-    {
-        String str = "";
-
-        for( String string : Iterables.limit( 3, Iterables.constant( "123" ) ) )
-        {
-            str += string;
-        }
-
-        assertThat( str, CoreMatchers.equalTo( "123123123" ) );
-    }
-
-    @Test
     public void testUnique()
     {
         String str = "";
@@ -103,7 +92,7 @@ public class IterablesTest
             int sum = 0;
 
             @Override
-            public Integer map( Integer number )
+            public Integer apply( Integer number )
             {
                 return sum += number;
             }
@@ -172,7 +161,7 @@ public class IterablesTest
         assertThat( Iterables.toList( Iterables.map( new Function<String, String>()
         {
 
-            public String map( String s )
+            public String apply( String s )
             {
                 return s + s;
             }
@@ -184,7 +173,7 @@ public class IterablesTest
         {
 
             @Override
-            public Integer map( Collection collection )
+            public Integer apply( Collection collection )
             {
                 return collection.size();
             }
@@ -231,7 +220,7 @@ public class IterablesTest
         {
 
             @Override
-            public String map( String s )
+            public String apply( String s )
             {
                 return s + ":" + s.length();
             }
@@ -248,11 +237,11 @@ public class IterablesTest
     {
         final int[] count = new int[ 1 ];
 
-        Iterable<String> b = Iterables.cache( Iterables.filter( Specifications.and( new Specification<String>()
+        Iterable<String> b = Iterables.cache( Iterables.filter( Specifications.and( new Predicate<String>()
         {
 
             @Override
-            public boolean satisfiedBy( String item )
+            public boolean test( String item )
             {
                 count[ 0] = count[ 0] + 1;
                 return true;

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/functional/src/test/java/org/qi4j/functional/SpecificationsTest.java
----------------------------------------------------------------------
diff --git a/core/functional/src/test/java/org/qi4j/functional/SpecificationsTest.java b/core/functional/src/test/java/org/qi4j/functional/SpecificationsTest.java
deleted file mode 100644
index 98b893e..0000000
--- a/core/functional/src/test/java/org/qi4j/functional/SpecificationsTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2010, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.qi4j.functional;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.equalTo;
-
-/**
- * JAVADOC
- */
-public class SpecificationsTest
-{
-    @Test
-    public void testTRUE()
-    {
-        Assert.assertThat( Specifications.<Object>TRUE().satisfiedBy( new Object() ), equalTo( true ) );
-    }
-
-    @Test
-    public void testNot()
-    {
-        Assert.assertThat( Specifications.not( Specifications.<Object>TRUE() )
-                               .satisfiedBy( new Object() ), equalTo( false ) );
-    }
-
-    @Test
-    public void testAnd()
-    {
-        Specification<Object> trueSpec = Specifications.<Object>TRUE();
-        Specification<Object> falseSpec = Specifications.not( Specifications.<Object>TRUE() );
-
-        Assert.assertThat( Specifications.and( falseSpec, falseSpec ).satisfiedBy( new Object() ), equalTo( false ) );
-        Assert.assertThat( Specifications.and( trueSpec, falseSpec ).satisfiedBy( new Object() ), equalTo( false ) );
-        Assert.assertThat( Specifications.and( falseSpec, trueSpec ).satisfiedBy( new Object() ), equalTo( false ) );
-        Assert.assertThat( Specifications.and( trueSpec, trueSpec ).satisfiedBy( new Object() ), equalTo( true ) );
-    }
-
-    @Test
-    public void testOr()
-    {
-        Specification<Object> trueSpec = Specifications.<Object>TRUE();
-        Specification<Object> falseSpec = Specifications.not( Specifications.<Object>TRUE() );
-
-        Assert.assertThat( Specifications.or( falseSpec, falseSpec ).satisfiedBy( new Object() ), equalTo( false ) );
-        Assert.assertThat( Specifications.or( trueSpec, falseSpec ).satisfiedBy( new Object() ), equalTo( true ) );
-        Assert.assertThat( Specifications.or( falseSpec, trueSpec ).satisfiedBy( new Object() ), equalTo( true ) );
-        Assert.assertThat( Specifications.or( trueSpec, trueSpec ).satisfiedBy( new Object() ), equalTo( true ) );
-    }
-
-    @Test
-    public void testIn()
-    {
-        Assert.assertThat( Specifications.in( "1", "2", "3" ).satisfiedBy( "2" ), equalTo( true ) );
-        Assert.assertThat( Specifications.in( "1", "2", "3" ).satisfiedBy( "4" ), equalTo( false ) );
-    }
-
-    @Test
-    public void testTranslate()
-    {
-        Function<Object, String> stringifier = new Function<Object, String>()
-        {
-            @Override
-            public String map( Object s )
-            {
-                return s.toString();
-            }
-        };
-
-        Assert.assertTrue( Specifications.translate( stringifier, Specifications.in( "3" ) ).satisfiedBy( 3L ) );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/functional/src/test/java/org/qi4j/functional/docsupport/FunctionalDocs.java
----------------------------------------------------------------------
diff --git a/core/functional/src/test/java/org/qi4j/functional/docsupport/FunctionalDocs.java b/core/functional/src/test/java/org/qi4j/functional/docsupport/FunctionalDocs.java
index 30bb31b..c0ca3a6 100644
--- a/core/functional/src/test/java/org/qi4j/functional/docsupport/FunctionalDocs.java
+++ b/core/functional/src/test/java/org/qi4j/functional/docsupport/FunctionalDocs.java
@@ -1,10 +1,11 @@
 package org.qi4j.functional.docsupport;
 
 import java.util.ArrayList;
+import java.util.function.Function;
 
-// START SNIPPET: func2
 import static org.qi4j.functional.ForEach.forEach;
-import static org.qi4j.functional.Functions.longSum;
+
+// START SNIPPET: func2
 // END SNIPPET: func2
 
 public class FunctionalDocs
@@ -34,4 +35,19 @@ public class FunctionalDocs
 // END SNIPPET: func2
         }
     }
+
+    private static Function<Number, Long> longSum()
+    {
+        return new Function<Number, Long>()
+        {
+            long sum;
+
+            @Override
+            public Long apply( Number number )
+            {
+                sum += number.longValue();
+                return sum;
+            }
+        };
+    }
 }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/io/src/main/java/org/qi4j/io/Transforms.java
----------------------------------------------------------------------
diff --git a/core/io/src/main/java/org/qi4j/io/Transforms.java b/core/io/src/main/java/org/qi4j/io/Transforms.java
index c7bcb7d..8573a0f 100644
--- a/core/io/src/main/java/org/qi4j/io/Transforms.java
+++ b/core/io/src/main/java/org/qi4j/io/Transforms.java
@@ -19,8 +19,8 @@ import java.nio.charset.Charset;
 import java.text.MessageFormat;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Specification;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import org.slf4j.Logger;
 
 /**
@@ -38,7 +38,7 @@ public class Transforms
      *
      * @return
      */
-    public static <T, ReceiverThrowableType extends Throwable> Output<T, ReceiverThrowableType> filter( final Specification<? super T> specification,
+    public static <T, ReceiverThrowableType extends Throwable> Output<T, ReceiverThrowableType> filter( final Predicate<? super T> specification,
                                                                                                         final Output<T, ReceiverThrowableType> output
     )
     {
@@ -60,7 +60,7 @@ public class Transforms
                             public void receive( T item )
                                 throws ReceiverThrowableType
                             {
-                                if( specification.satisfiedBy( item ) )
+                                if( specification.test( item ) )
                                 {
                                     receiver.receive( item );
                                 }
@@ -105,7 +105,7 @@ public class Transforms
                             public void receive( From item )
                                 throws ReceiverThrowableType
                             {
-                                receiver.receive( function.map( item ) );
+                                receiver.receive( function.apply( item ) );
                             }
                         } );
                     }
@@ -126,7 +126,7 @@ public class Transforms
      *
      * @return
      */
-    public static <T, ReceiverThrowableType extends Throwable> Output<T, ReceiverThrowableType> filteredMap( final Specification<? super T> specification,
+    public static <T, ReceiverThrowableType extends Throwable> Output<T, ReceiverThrowableType> filteredMap( final Predicate<? super T> specification,
                                                                                                              final Function<? super T, ? extends T> function,
                                                                                                              final Output<T, ReceiverThrowableType> output
     )
@@ -149,9 +149,9 @@ public class Transforms
                             public void receive( T item )
                                 throws ReceiverThrowableType
                             {
-                                if( specification.satisfiedBy( item ) )
+                                if( specification.test( item ) )
                                 {
-                                    receiver.receive( function.map( item ) );
+                                    receiver.receive( function.apply( item ) );
                                 }
                                 else
                                 {
@@ -289,7 +289,7 @@ public class Transforms
         }
 
         @Override
-        public T map( T t )
+        public T apply( T t )
         {
             count++;
             return t;
@@ -311,7 +311,7 @@ public class Transforms
         }
 
         @Override
-        public byte[] map( String s )
+        public byte[] apply( String s )
         {
             return s.getBytes( charSet );
         }
@@ -331,7 +331,7 @@ public class Transforms
         }
 
         @Override
-        public String map( ByteBuffer buffer )
+        public String apply( ByteBuffer buffer )
         {
             return new String( buffer.array(), charSet );
         }
@@ -344,7 +344,7 @@ public class Transforms
         implements Function<Object, String>
     {
         @Override
-        public String map( Object o )
+        public String apply( Object o )
         {
             return o.toString();
         }
@@ -369,7 +369,7 @@ public class Transforms
         }
 
         @Override
-        public T map( T item )
+        public T apply( T item )
         {
             logger.info( format.format( new String[]{ item.toString() } ) );
             return item;
@@ -408,9 +408,9 @@ public class Transforms
         }
 
         @Override
-        public T map( T t )
+        public T apply( T t )
         {
-            counter.map( t );
+            counter.apply( t );
             if( counter.count % interval == 0 )
             {
                 logProgress();
@@ -423,7 +423,7 @@ public class Transforms
         {
             if( log != null )
             {
-                log.map( counter.count + "" );
+                log.apply( counter.count + "" );
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/io/src/test/java/org/qi4j/io/InputOutputTest.java
----------------------------------------------------------------------
diff --git a/core/io/src/test/java/org/qi4j/io/InputOutputTest.java b/core/io/src/test/java/org/qi4j/io/InputOutputTest.java
index 72f2885..7eb06d6 100644
--- a/core/io/src/test/java/org/qi4j/io/InputOutputTest.java
+++ b/core/io/src/test/java/org/qi4j/io/InputOutputTest.java
@@ -33,10 +33,10 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.function.Function;
 import org.hamcrest.CoreMatchers;
 import org.junit.Assert;
 import org.junit.Test;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.Visitor;
 import org.slf4j.LoggerFactory;
 
@@ -176,7 +176,7 @@ public class InputOutputTest
                 stringCounter,
                 Transforms.map( new Function<String, String>()
                 {
-                    public String map( String s )
+                    public String apply( String s )
                     {
                         System.out.println( s );
                         return s;
@@ -205,7 +205,7 @@ public class InputOutputTest
                 stringCounter,
                 Transforms.map( new Function<String, String>()
             {
-                public String map( String s )
+                public String apply( String s )
                 {
                     System.out.println( s );
                     return s;

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/association/AbstractAssociationInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/AbstractAssociationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/association/AbstractAssociationInstance.java
index e42b2c5..52e4f2d 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/AbstractAssociationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/AbstractAssociationInstance.java
@@ -3,10 +3,10 @@ package org.qi4j.runtime.association;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.Type;
+import java.util.function.BiFunction;
 import org.qi4j.api.association.AbstractAssociation;
 import org.qi4j.api.entity.EntityComposite;
 import org.qi4j.api.entity.EntityReference;
-import org.qi4j.functional.Function2;
 import org.qi4j.runtime.composite.ProxyReferenceInvocationHandler;
 import org.qi4j.runtime.entity.EntityInstance;
 
@@ -17,10 +17,10 @@ public abstract class AbstractAssociationInstance<T>
     implements AbstractAssociation
 {
     protected AssociationInfo associationInfo;
-    private final Function2<EntityReference, Type, Object> entityFunction;
+    private final BiFunction<EntityReference, Type, Object> entityFunction;
 
     public AbstractAssociationInstance( AssociationInfo associationInfo,
-                                        Function2<EntityReference, Type, Object> entityFunction
+                                        BiFunction<EntityReference, Type, Object> entityFunction
     )
     {
         this.associationInfo = associationInfo;
@@ -45,7 +45,7 @@ public abstract class AbstractAssociationInstance<T>
             return null;
         }
 
-        return (T) entityFunction.map( entityId, associationInfo.type() );
+        return (T) entityFunction.apply( entityId, associationInfo.type() );
     }
 
     protected EntityReference getEntityReference( Object composite )

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInstance.java
index d5babcd..cc8deb4 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInstance.java
@@ -15,12 +15,12 @@
 package org.qi4j.runtime.association;
 
 import java.lang.reflect.Type;
+import java.util.function.BiFunction;
 import org.qi4j.api.association.Association;
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.AssociationWrapper;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.property.Property;
-import org.qi4j.functional.Function2;
 
 /**
  * Implementation of Association to a single Entity.
@@ -32,7 +32,7 @@ public final class AssociationInstance<T>
     private Property<EntityReference> associationState;
 
     public AssociationInstance( AssociationInfo associationInfo,
-                                Function2<EntityReference, Type, Object> entityFunction,
+                                BiFunction<EntityReference, Type, Object> entityFunction,
                                 Property<EntityReference> associationState
     )
     {

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationInstance.java
index a946862..b28b7cb 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationInstance.java
@@ -6,11 +6,11 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.function.BiFunction;
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.ManyAssociation;
 import org.qi4j.api.association.ManyAssociationWrapper;
 import org.qi4j.api.entity.EntityReference;
-import org.qi4j.functional.Function2;
 import org.qi4j.runtime.composite.ConstraintsCheck;
 import org.qi4j.spi.entity.ManyAssociationState;
 
@@ -24,7 +24,7 @@ public class ManyAssociationInstance<T>
     private ManyAssociationState manyAssociationState;
 
     public ManyAssociationInstance( AssociationInfo associationInfo,
-                                    Function2<EntityReference, Type, Object> associationFunction,
+                                    BiFunction<EntityReference, Type, Object> associationFunction,
                                     ManyAssociationState manyAssociationState
     )
     {

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationModel.java b/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationModel.java
index 3cc5d81..3c3b438 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationModel.java
@@ -24,6 +24,7 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.util.List;
+import java.util.function.BiFunction;
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.GenericAssociationInfo;
 import org.qi4j.api.association.ManyAssociation;
@@ -37,7 +38,6 @@ import org.qi4j.api.entity.Queryable;
 import org.qi4j.api.property.Immutable;
 import org.qi4j.api.util.Classes;
 import org.qi4j.bootstrap.BindingException;
-import org.qi4j.functional.Function2;
 import org.qi4j.functional.Visitable;
 import org.qi4j.functional.Visitor;
 import org.qi4j.runtime.composite.ValueConstraintsInstance;
@@ -142,12 +142,12 @@ public final class ManyAssociationModel
 
     public <T> ManyAssociation<T> newInstance( final ModuleUnitOfWork uow, EntityState state )
     {
-        return new ManyAssociationInstance<>( state instanceof BuilderEntityState ? builderInfo : this, new Function2<EntityReference, Type, Object>()
+        return new ManyAssociationInstance<>( state instanceof BuilderEntityState ? builderInfo : this, new BiFunction<EntityReference, Type, Object>()
         {
             @Override
-            public Object map( EntityReference entityReference, Type type )
+            public Object apply( EntityReference entityReference, Type type )
             {
-                return uow.get( Classes.RAW_CLASS.map( type ), entityReference.identity() );
+                return uow.get( Classes.RAW_CLASS.apply( type ), entityReference.identity() );
             }
         }, state.manyAssociationValueOf( qualifiedName ) );
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
index 4ca67b2..f606f79 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
@@ -22,9 +22,9 @@ import java.lang.reflect.Type;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.function.BiFunction;
 import org.qi4j.api.association.NamedAssociation;
 import org.qi4j.api.entity.EntityReference;
-import org.qi4j.functional.Function2;
 import org.qi4j.runtime.composite.ConstraintsCheck;
 import org.qi4j.spi.entity.NamedAssociationState;
 
@@ -36,7 +36,7 @@ public class NamedAssociationInstance<T>
     private final NamedAssociationState namedAssociationState;
 
     public NamedAssociationInstance( AssociationInfo associationInfo,
-                                     Function2<EntityReference, Type, Object> associationFunction,
+                                     BiFunction<EntityReference, Type, Object> associationFunction,
                                      NamedAssociationState namedAssociationState )
     {
         super( associationInfo, associationFunction );

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationModel.java b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationModel.java
index 7c144d0..65a7cfe 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationModel.java
@@ -25,6 +25,7 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.util.List;
+import java.util.function.BiFunction;
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.GenericAssociationInfo;
 import org.qi4j.api.association.NamedAssociation;
@@ -38,7 +39,6 @@ import org.qi4j.api.entity.Queryable;
 import org.qi4j.api.property.Immutable;
 import org.qi4j.api.util.Classes;
 import org.qi4j.bootstrap.BindingException;
-import org.qi4j.functional.Function2;
 import org.qi4j.functional.Visitable;
 import org.qi4j.functional.Visitor;
 import org.qi4j.runtime.composite.ValueConstraintsInstance;
@@ -143,12 +143,12 @@ public final class NamedAssociationModel
 
     public <T> NamedAssociation<T> newInstance( final ModuleUnitOfWork uow, EntityState state )
     {
-        return new NamedAssociationInstance<>( state instanceof BuilderEntityState ? builderInfo : this, new Function2<EntityReference, Type, Object>()
+        return new NamedAssociationInstance<>( state instanceof BuilderEntityState ? builderInfo : this, new BiFunction<EntityReference, Type, Object>()
         {
             @Override
-            public Object map( EntityReference entityReference, Type type )
+            public Object apply( EntityReference entityReference, Type type )
             {
-                return uow.get( Classes.RAW_CLASS.map( type ), entityReference.identity() );
+                return uow.get( Classes.RAW_CLASS.apply( type ), entityReference.identity() );
             }
         }, state.namedAssociationValueOf( qualifiedName ) );
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java
index 7441390..5f064ff 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/CompositeAssemblyImpl.java
@@ -32,6 +32,8 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import org.qi4j.api.common.MetaInfo;
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.common.QualifiedName;
@@ -58,10 +60,8 @@ import org.qi4j.api.util.Classes;
 import org.qi4j.api.util.Fields;
 import org.qi4j.bootstrap.StateDeclarations;
 import org.qi4j.functional.ForEach;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.HierarchicalVisitorAdapter;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import org.qi4j.functional.Visitor;
 import org.qi4j.runtime.composite.AbstractConstraintModel;
 import org.qi4j.runtime.composite.CompositeConstraintModel;
@@ -314,10 +314,10 @@ public abstract class CompositeAssemblyImpl
         // Check if mixinClass implements the method. If so, check if the mixinClass is generic or if the filter passes.
         // If a mixinClass is both generic AND non-generic at the same time, then the filter applies to the non-generic
         // side only.
-        Specification<Class<?>> appliesToSpec = new Specification<Class<?>>()
+        Predicate<Class<?>> appliesToSpec = new Predicate<Class<?>>()
         {
             @Override
-            public boolean satisfiedBy( Class<?> item )
+            public boolean test( Class<?> item )
             {
                 return helper.appliesTo( item, method, types, item );
             }
@@ -331,10 +331,10 @@ public abstract class CompositeAssemblyImpl
     private Class<?> findGenericImplementation( final Method method, Iterable<Class<?>> mixins )
     {
         // Check if mixinClass is generic and the applies-to filter passes
-        return first( filter( and( GenericSpecification.INSTANCE, new Specification<Class<?>>()
+        return first( filter( and( GenericSpecification.INSTANCE, new Predicate<Class<?>>()
         {
             @Override
-            public boolean satisfiedBy( Class<?> item )
+            public boolean test( Class<?> item )
             {
                 return helper.appliesTo( item, method, types, item );
             }
@@ -399,7 +399,7 @@ public abstract class CompositeAssemblyImpl
                             return true;
                         }
                     };
-                    ForEach.forEach( Fields.FIELDS_OF.map( model.mixinClass() ) ).
+                    ForEach.forEach( Fields.FIELDS_OF.apply( model.mixinClass() ) ).
                         filter( Annotations.hasAnnotation( State.class ) ).
                         visit( addState );
                     return false;
@@ -420,7 +420,7 @@ public abstract class CompositeAssemblyImpl
             return; // Skip already registered names
         }
 
-        if( Property.class.isAssignableFrom( Classes.RAW_CLASS.map( typeOf( accessor ) ) ) )
+        if( Property.class.isAssignableFrom( Classes.RAW_CLASS.apply( typeOf( accessor ) ) ) )
         {
             propertiesModel.addProperty( newPropertyModel( accessor, constraintClasses ) );
             registeredStateNames.add( stateName );
@@ -694,7 +694,7 @@ public abstract class CompositeAssemblyImpl
         Function<Type, Iterable<Class<? extends Constraint<?, ?>>>> function = new Function<Type, Iterable<Class<? extends Constraint<?, ?>>>>()
         {
             @Override
-            public Iterable<Class<? extends Constraint<?, ?>>> map( Type type )
+            public Iterable<Class<? extends Constraint<?, ?>>> apply( Type type )
             {
                 Constraints constraints = Annotations.annotationOn( type, Constraints.class );
                 if( constraints == null )
@@ -724,7 +724,7 @@ public abstract class CompositeAssemblyImpl
         Function<Type, Iterable<Class<?>>> function = new Function<Type, Iterable<Class<?>>>()
         {
             @Override
-            public Iterable<Class<?>> map( Type type )
+            public Iterable<Class<?>> apply( Type type )
             {
                 Concerns concerns = Annotations.annotationOn( type, Concerns.class );
                 if( concerns == null )
@@ -754,7 +754,7 @@ public abstract class CompositeAssemblyImpl
         Function<Type, Iterable<Class<?>>> function = new Function<Type, Iterable<Class<?>>>()
         {
             @Override
-            public Iterable<Class<?>> map( Type type )
+            public Iterable<Class<?>> apply( Type type )
             {
                 SideEffects sideEffects = Annotations.annotationOn( type, SideEffects.class );
                 if( sideEffects == null )
@@ -818,7 +818,7 @@ public abstract class CompositeAssemblyImpl
         Function<Type, Iterable<Class<?>>> function = new Function<Type, Iterable<Class<?>>>()
         {
             @Override
-            public Iterable<Class<?>> map( Type type )
+            public Iterable<Class<?>> apply( Type type )
             {
                 Mixins mixins = Annotations.annotationOn( type, Mixins.class );
                 if( mixins == null )

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/EntityAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/EntityAssemblyImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/EntityAssemblyImpl.java
index e74f63c..1d06720 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/EntityAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/EntityAssemblyImpl.java
@@ -139,7 +139,7 @@ public final class EntityAssemblyImpl
             return; // Skip already registered names
         }
 
-        Class<?> accessorType = Classes.RAW_CLASS.map( typeOf( accessor ) );
+        Class<?> accessorType = Classes.RAW_CLASS.apply( typeOf( accessor ) );
         if( Property.class.isAssignableFrom( accessorType ) )
         {
             propertiesModel.addProperty( newPropertyModel( accessor, constraintClasses ) );

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/LayerAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/LayerAssemblyImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/LayerAssemblyImpl.java
index 8853f92..b0d6882 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/LayerAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/LayerAssemblyImpl.java
@@ -23,6 +23,7 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Predicate;
 import org.qi4j.api.activation.Activator;
 import org.qi4j.api.common.MetaInfo;
 import org.qi4j.api.common.Visibility;
@@ -44,7 +45,6 @@ import org.qi4j.bootstrap.TransientAssembly;
 import org.qi4j.bootstrap.TransientDeclaration;
 import org.qi4j.bootstrap.ValueAssembly;
 import org.qi4j.bootstrap.ValueDeclaration;
-import org.qi4j.functional.Specification;
 
 /**
  * Assembly of a Layer. From here you can create more ModuleAssemblies for
@@ -135,7 +135,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public EntityDeclaration entities( Specification<? super EntityAssembly> specification )
+    public EntityDeclaration entities( Predicate<? super EntityAssembly> specification )
     {
         final List<EntityDeclaration> declarations = new ArrayList<>();
 
@@ -209,7 +209,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public ServiceDeclaration services( Specification<? super ServiceAssembly> specification )
+    public ServiceDeclaration services( Predicate<? super ServiceAssembly> specification )
     {
         final List<ServiceDeclaration> declarations = new ArrayList<>();
 
@@ -325,7 +325,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public TransientDeclaration transients( Specification<? super TransientAssembly> specification )
+    public TransientDeclaration transients( Predicate<? super TransientAssembly> specification )
     {
         final List<TransientDeclaration> declarations = new ArrayList<>();
 
@@ -399,7 +399,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public ValueDeclaration values( Specification<? super ValueAssembly> specification )
+    public ValueDeclaration values( Predicate<? super ValueAssembly> specification )
     {
         final List<ValueDeclaration> declarations = new ArrayList<>();
 
@@ -472,7 +472,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public ObjectDeclaration objects( Specification<? super ObjectAssembly> specification )
+    public ObjectDeclaration objects( Predicate<? super ObjectAssembly> specification )
     {
         final List<ObjectDeclaration> declarations = new ArrayList<>();
 
@@ -506,7 +506,7 @@ public final class LayerAssemblyImpl
     }
 
     @Override
-    public ImportedServiceDeclaration importedServices( Specification<? super ImportedServiceAssembly> specification )
+    public ImportedServiceDeclaration importedServices( Predicate<? super ImportedServiceAssembly> specification )
     {
         final List<ImportedServiceDeclaration> declarations = new ArrayList<>();
 

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ModuleAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ModuleAssemblyImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ModuleAssemblyImpl.java
index eb038eb..7535b4d 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ModuleAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ModuleAssemblyImpl.java
@@ -22,6 +22,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 import org.qi4j.api.activation.Activator;
 import org.qi4j.api.common.MetaInfo;
 import org.qi4j.api.common.Visibility;
@@ -51,7 +52,6 @@ import org.qi4j.bootstrap.TransientDeclaration;
 import org.qi4j.bootstrap.ValueAssembly;
 import org.qi4j.bootstrap.ValueDeclaration;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import org.qi4j.runtime.activation.ActivatorsModel;
 import org.qi4j.runtime.composite.TransientModel;
 import org.qi4j.runtime.composite.TransientsModel;
@@ -163,12 +163,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public ValueDeclaration values( Specification<? super ValueAssembly> specification )
+    public ValueDeclaration values( Predicate<? super ValueAssembly> specification )
     {
         List<ValueAssemblyImpl> assemblies = new ArrayList<>();
         for( ValueAssemblyImpl transientAssembly : valueAssemblies.values() )
         {
-            if( specification.satisfiedBy( transientAssembly ) )
+            if( specification.test( transientAssembly ) )
             {
                 assemblies.add( transientAssembly );
             }
@@ -201,12 +201,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public TransientDeclaration transients( Specification<? super TransientAssembly> specification )
+    public TransientDeclaration transients( Predicate<? super TransientAssembly> specification )
     {
         List<TransientAssemblyImpl> assemblies = new ArrayList<>();
         for( TransientAssemblyImpl transientAssembly : transientAssemblies.values() )
         {
-            if( specification.satisfiedBy( transientAssembly ) )
+            if( specification.test( transientAssembly ) )
             {
                 assemblies.add( transientAssembly );
             }
@@ -239,12 +239,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public EntityDeclaration entities( Specification<? super EntityAssembly> specification )
+    public EntityDeclaration entities( Predicate<? super EntityAssembly> specification )
     {
         List<EntityAssemblyImpl> assemblies = new ArrayList<>();
         for( EntityAssemblyImpl entityAssembly : entityAssemblies.values() )
         {
-            if( specification.satisfiedBy( entityAssembly ) )
+            if( specification.test( entityAssembly ) )
             {
                 assemblies.add( entityAssembly );
             }
@@ -281,12 +281,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public ObjectDeclaration objects( Specification<? super ObjectAssembly> specification )
+    public ObjectDeclaration objects( Predicate<? super ObjectAssembly> specification )
     {
         List<ObjectAssemblyImpl> assemblies = new ArrayList<>();
         for( ObjectAssemblyImpl objectAssembly : objectAssemblies.values() )
         {
-            if( specification.satisfiedBy( objectAssembly ) )
+            if( specification.test( objectAssembly ) )
             {
                 assemblies.add( objectAssembly );
             }
@@ -333,12 +333,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public ServiceDeclaration services( Specification<? super ServiceAssembly> specification )
+    public ServiceDeclaration services( Predicate<? super ServiceAssembly> specification )
     {
         List<ServiceAssemblyImpl> assemblies = new ArrayList<>();
         for( ServiceAssemblyImpl serviceAssembly : serviceAssemblies )
         {
-            if( specification.satisfiedBy( serviceAssembly ) )
+            if( specification.test( serviceAssembly ) )
             {
                 assemblies.add( serviceAssembly );
             }
@@ -370,12 +370,12 @@ public final class ModuleAssemblyImpl
     }
 
     @Override
-    public ImportedServiceDeclaration importedServices( Specification<? super ImportedServiceAssembly> specification )
+    public ImportedServiceDeclaration importedServices( Predicate<? super ImportedServiceAssembly> specification )
     {
         List<ImportedServiceAssemblyImpl> assemblies = new ArrayList<>();
         for( ImportedServiceAssemblyImpl objectAssembly : importedServiceAssemblies.values() )
         {
-            if( specification.satisfiedBy( objectAssembly ) )
+            if( specification.test( objectAssembly ) )
             {
                 assemblies.add( objectAssembly );
             }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ServiceAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ServiceAssemblyImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ServiceAssemblyImpl.java
index 1adbfe6..ca7e4e6 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ServiceAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ServiceAssemblyImpl.java
@@ -17,6 +17,7 @@ package org.qi4j.runtime.bootstrap;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Function;
 import org.qi4j.api.activation.Activator;
 import org.qi4j.api.activation.Activators;
 import org.qi4j.api.common.InvalidApplicationException;
@@ -25,7 +26,6 @@ import org.qi4j.api.util.Annotations;
 import org.qi4j.api.util.Classes;
 import org.qi4j.bootstrap.ServiceAssembly;
 import org.qi4j.bootstrap.StateDeclarations;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
 import org.qi4j.runtime.activation.ActivatorsModel;
 import org.qi4j.runtime.service.ServiceModel;
@@ -88,7 +88,7 @@ public final class ServiceAssemblyImpl extends CompositeAssemblyImpl
         Function<Type, Iterable<Class<? extends Activator<?>>>> function = new Function<Type, Iterable<Class<? extends Activator<?>>>>()
         {
             @Override
-            public Iterable<Class<? extends Activator<?>>> map( Type type )
+            public Iterable<Class<? extends Activator<?>>> apply( Type type )
             {
                 Activators activators = Annotations.annotationOn( type, Activators.class );
                 if( activators == null )

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ValueAssemblyImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ValueAssemblyImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ValueAssemblyImpl.java
index 605efa1..4c4b38b 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ValueAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ValueAssemblyImpl.java
@@ -118,7 +118,7 @@ public final class ValueAssemblyImpl
             return; // Skip already registered names
         }
 
-        Class<?> accessorType = Classes.RAW_CLASS.map( typeOf( accessor ) );
+        Class<?> accessorType = Classes.RAW_CLASS.apply( typeOf( accessor ) );
         if( Property.class.isAssignableFrom( accessorType ) )
         {
             propertiesModel.addProperty( newPropertyModel( accessor, constraintClasses ) );

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodModel.java
index e925b9d..a72f63d 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodModel.java
@@ -216,7 +216,7 @@ public final class CompositeMethodModel
             try
             {
                 MixinModel model = mixins.mixinFor( method );
-                if( GenericSpecification.INSTANCE.satisfiedBy( model.mixinClass() ) )
+                if( GenericSpecification.INSTANCE.test( model.mixinClass() ) )
                 {
                     return false;
                 }
@@ -237,7 +237,7 @@ public final class CompositeMethodModel
             try
             {
                 MixinModel model = mixins.mixinFor( method );
-                if( !GenericSpecification.INSTANCE.satisfiedBy( model.mixinClass() ) )
+                if( !GenericSpecification.INSTANCE.test( model.mixinClass() ) )
                 {
                     T annotation = annotationClass.cast( model.mixinClass()
                                                              .getMethod( method.getName(), method.getParameterTypes() )
@@ -264,7 +264,7 @@ public final class CompositeMethodModel
             List<Annotation> annotations = new ArrayList<Annotation>();
             MixinModel model = mixins.mixinFor( method );
             Annotation[] mixinAnnotations = new Annotation[ 0 ];
-            if( !GenericSpecification.INSTANCE.satisfiedBy( model.mixinClass() ) )
+            if( !GenericSpecification.INSTANCE.test( model.mixinClass() ) )
             {
                 mixinAnnotations = model.mixinClass().getAnnotations();
                 annotations.addAll( Arrays.asList( mixinAnnotations ) );

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstraintDeclaration.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstraintDeclaration.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstraintDeclaration.java
index 048c4ed..91a3b3b 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstraintDeclaration.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstraintDeclaration.java
@@ -51,14 +51,14 @@ public final class ConstraintDeclaration
         if( constraintValueType instanceof Class )
         {
             Class constraintValueClass = (Class) constraintValueType;
-            Class valueClass = Classes.RAW_CLASS.map( valueType );
+            Class valueClass = Classes.RAW_CLASS.apply( valueType );
             return constraintAnnotationType.equals( annotationType ) && constraintValueClass.isAssignableFrom( valueClass );
         }
         else if( constraintValueType instanceof ParameterizedType )
         {
             // TODO Handle nested generics
-            Class constraintValueClass = Classes.RAW_CLASS.map( constraintValueType );
-            Class valueClass = Classes.RAW_CLASS.map( valueType );
+            Class constraintValueClass = Classes.RAW_CLASS.apply( constraintValueType );
+            Class valueClass = Classes.RAW_CLASS.apply( valueType );
             return constraintAnnotationType.equals( annotationType ) && constraintValueClass.isAssignableFrom( valueClass );
         }
         else

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstructorsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstructorsModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstructorsModel.java
index f482d3b..fd869d2 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstructorsModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/ConstructorsModel.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.function.Function;
 import org.qi4j.api.common.ConstructionException;
 import org.qi4j.api.composite.CompositeDescriptor;
 import org.qi4j.api.composite.InvalidCompositeException;
@@ -32,7 +33,6 @@ import org.qi4j.api.injection.scope.Uses;
 import org.qi4j.api.util.Annotations;
 import org.qi4j.api.util.Classes;
 import org.qi4j.bootstrap.BindingException;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.HierarchicalVisitor;
 import org.qi4j.functional.HierarchicalVisitorAdapter;
 import org.qi4j.functional.Iterables;
@@ -112,7 +112,7 @@ public final class ConstructorsModel
         Function<ConstructorModel, Iterable<DependencyModel>> constructorDependencies = new Function<ConstructorModel, Iterable<DependencyModel>>()
         {
             @Override
-            public Iterable<DependencyModel> map( ConstructorModel constructorModel )
+            public Iterable<DependencyModel> apply( ConstructorModel constructorModel )
             {
                 return constructorModel.dependencies();
             }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/composite/GenericSpecification.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/GenericSpecification.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/GenericSpecification.java
index bc0f612..3908381 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/GenericSpecification.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/GenericSpecification.java
@@ -1,18 +1,18 @@
 package org.qi4j.runtime.composite;
 
 import java.lang.reflect.InvocationHandler;
-import org.qi4j.functional.Specification;
+import java.util.function.Predicate;
 
 /**
  * Specification that checks whether a given class implements InvocationHandler or not.
  */
 public class GenericSpecification
-    implements Specification<Class<?>>
+    implements Predicate<Class<?>>
 {
     public static final GenericSpecification INSTANCE = new GenericSpecification();
 
     @Override
-    public boolean satisfiedBy( Class<?> item )
+    public boolean test( Class<?> item )
     {
         return InvocationHandler.class.isAssignableFrom( item );
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/composite/MixinsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/MixinsModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/MixinsModel.java
index 8a4c349..eb5fe4f 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/MixinsModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/MixinsModel.java
@@ -23,12 +23,12 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import org.qi4j.api.util.Classes;
 import org.qi4j.bootstrap.BindingException;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.HierarchicalVisitor;
 import org.qi4j.functional.HierarchicalVisitorAdapter;
-import org.qi4j.functional.Specification;
 import org.qi4j.functional.VisitableHierarchy;
 import org.qi4j.runtime.injection.DependencyModel;
 import org.qi4j.runtime.injection.InjectedFieldModel;
@@ -90,7 +90,7 @@ public class MixinsModel
     {
         for( Type type : interfacesOf( mixinType ) )
         {
-            mixinTypes.add( Classes.RAW_CLASS.map( type ) );
+            mixinTypes.add( Classes.RAW_CLASS.apply( type ) );
         }
     }
 
@@ -194,7 +194,7 @@ public class MixinsModel
         return flattenIterables( map( new Function<MixinModel, Iterable<DependencyModel>>()
         {
             @Override
-            public Iterable<DependencyModel> map( MixinModel mixinModel )
+            public Iterable<DependencyModel> apply( MixinModel mixinModel )
             {
                 return mixinModel.dependencies();
             }
@@ -206,14 +206,14 @@ public class MixinsModel
         return map( new Function<Map.Entry<Method, MixinModel>, Method>()
         {
             @Override
-            public Method map( Map.Entry<Method, MixinModel> entry )
+            public Method apply( Map.Entry<Method, MixinModel> entry )
             {
                 return entry.getKey();
             }
-        }, filter( new Specification<Map.Entry<Method, MixinModel>>()
+        }, filter( new Predicate<Map.Entry<Method, MixinModel>>()
         {
             @Override
-            public boolean satisfiedBy( Map.Entry<Method, MixinModel> item )
+            public boolean test( Map.Entry<Method, MixinModel> item )
             {
                 MixinModel model = item.getValue();
                 return model.mixinClass().equals( mixinClass );

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientInstance.java
index 508acf0..bc402c9 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientInstance.java
@@ -142,7 +142,7 @@ public class TransientInstance
         {
             return false;
         }
-        TransientInstance other = (TransientInstance) Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.map( (Composite) o );
+        TransientInstance other = (TransientInstance) Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.apply( (Composite) o );
         if( other.mixins.length != mixins.length )
         {
             return false;

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityStateInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityStateInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityStateInstance.java
index d44a3f9..0eaa783 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityStateInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityStateInstance.java
@@ -23,6 +23,8 @@ import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Type;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.BiFunction;
+import java.util.function.Function;
 import org.qi4j.api.association.Association;
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.AssociationStateHolder;
@@ -33,8 +35,6 @@ import org.qi4j.api.property.Property;
 import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.api.unitofwork.UnitOfWork;
 import org.qi4j.api.util.Classes;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Function2;
 import org.qi4j.functional.Iterables;
 import org.qi4j.runtime.association.AssociationInstance;
 import org.qi4j.runtime.association.AssociationModel;
@@ -57,19 +57,19 @@ public final class EntityStateInstance
 
     private final EntityStateModel stateModel;
     private EntityState entityState;
-    private final Function2<EntityReference, Type, Object> entityFunction;
+    private final BiFunction<EntityReference, Type, Object> entityFunction;
 
     public EntityStateInstance( EntityStateModel stateModel, final UnitOfWork uow, EntityState entityState )
     {
         this.stateModel = stateModel;
         this.entityState = entityState;
 
-        entityFunction = new Function2<EntityReference, Type, Object>()
+        entityFunction = new BiFunction<EntityReference, Type, Object>()
         {
             @Override
-            public Object map( EntityReference entityReference, Type type )
+            public Object apply( EntityReference entityReference, Type type )
             {
-                return uow.get( Classes.RAW_CLASS.map( type ), entityReference.identity() );
+                return uow.get( Classes.RAW_CLASS.apply( type ), entityReference.identity() );
             }
         };
     }
@@ -103,7 +103,7 @@ public final class EntityStateInstance
         return Iterables.map( new Function<PropertyDescriptor, Property<?>>()
         {
             @Override
-            public Property<?> map( PropertyDescriptor propertyDescriptor )
+            public Property<?> apply( PropertyDescriptor propertyDescriptor )
             {
                 return propertyFor( propertyDescriptor.accessor() );
             }
@@ -153,7 +153,7 @@ public final class EntityStateInstance
         return Iterables.map( new Function<AssociationDescriptor, Association<?>>()
         {
             @Override
-            public Association<?> map( AssociationDescriptor associationDescriptor )
+            public Association<?> apply( AssociationDescriptor associationDescriptor )
             {
                 return associationFor( associationDescriptor.accessor() );
             }
@@ -189,7 +189,7 @@ public final class EntityStateInstance
         return Iterables.map( new Function<AssociationDescriptor, ManyAssociation<?>>()
         {
             @Override
-            public ManyAssociation<?> map( AssociationDescriptor associationDescriptor )
+            public ManyAssociation<?> apply( AssociationDescriptor associationDescriptor )
             {
                 return manyAssociationFor( associationDescriptor.accessor() );
             }
@@ -225,7 +225,7 @@ public final class EntityStateInstance
         return Iterables.map( new Function<AssociationDescriptor, NamedAssociation<?>>()
         {
             @Override
-            public NamedAssociation<?> map( AssociationDescriptor associationDescriptor )
+            public NamedAssociation<?> apply( AssociationDescriptor associationDescriptor )
             {
                 return namedAssociationFor( associationDescriptor.accessor() );
             }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/injection/Dependencies.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/Dependencies.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/Dependencies.java
index 39bc468..f2aa380 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/Dependencies.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/Dependencies.java
@@ -1,6 +1,6 @@
 package org.qi4j.runtime.injection;
 
-import org.qi4j.functional.Function;
+import java.util.function.Function;
 
 /**
  * TODO
@@ -10,7 +10,7 @@ public interface Dependencies
     public static Function<Dependencies, Iterable<DependencyModel>> DEPENDENCIES_FUNCTION = new Function<Dependencies, Iterable<DependencyModel>>()
     {
         @Override
-        public Iterable<DependencyModel> map( Dependencies dependencies )
+        public Iterable<DependencyModel> apply( Dependencies dependencies )
         {
             return dependencies.dependencies();
         }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/injection/DependencyModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/DependencyModel.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/DependencyModel.java
index 10eca0d..fd74e3d 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/DependencyModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/DependencyModel.java
@@ -19,14 +19,14 @@ import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.util.Collections;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import org.qi4j.api.common.ConstructionException;
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.composite.DependencyDescriptor;
 import org.qi4j.bootstrap.BindingException;
 import org.qi4j.bootstrap.InvalidInjectionException;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import org.qi4j.functional.Visitable;
 import org.qi4j.functional.Visitor;
 import org.qi4j.runtime.injection.provider.InjectionProviderException;
@@ -384,7 +384,7 @@ public final class DependencyModel
     }
 
     public static class ScopeSpecification
-        implements Specification<DependencyModel>
+        implements Predicate<DependencyModel>
     {
         private final Class<? extends Annotation> scope;
 
@@ -394,7 +394,7 @@ public final class DependencyModel
         }
 
         @Override
-        public boolean satisfiedBy( DependencyModel model )
+        public boolean test( DependencyModel model )
         {
             return model.hasScope( scope );
         }
@@ -404,7 +404,7 @@ public final class DependencyModel
         implements Function<DependencyModel, Class<?>>
     {
         @Override
-        public Class<?> map( DependencyModel dependencyModel )
+        public Class<?> apply( DependencyModel dependencyModel )
         {
             return dependencyModel.rawInjectionType();
         }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldModel.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldModel.java
index 6b35f2a..3cb46c6 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldModel.java
@@ -19,12 +19,12 @@ import java.lang.reflect.Field;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
 import java.util.Collection;
+import java.util.function.Predicate;
 import org.qi4j.api.composite.InjectedFieldDescriptor;
 import org.qi4j.api.util.Classes;
 import org.qi4j.bootstrap.BindingException;
 import org.qi4j.bootstrap.InjectionException;
 import org.qi4j.functional.HierarchicalVisitor;
-import org.qi4j.functional.Specification;
 import org.qi4j.functional.VisitableHierarchy;
 import org.qi4j.runtime.composite.TransientInstance;
 import org.qi4j.runtime.model.Resolution;
@@ -129,9 +129,9 @@ public final class InjectedFieldModel
         return visitor.visitLeave( this );
     }
 
-    public Collection<DependencyModel> filter( Specification<DependencyModel> specification )
+    public Collection<DependencyModel> filter( Predicate<DependencyModel> specification )
     {
-        if( specification.satisfiedBy( dependencyModel ) )
+        if( specification.test( dependencyModel ) )
         {
             return singleton( dependencyModel );
         }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldsModel.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldsModel.java
index dce28f2..170ed6a 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldsModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldsModel.java
@@ -21,10 +21,10 @@ import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Function;
 import org.qi4j.api.injection.InjectionScope;
 import org.qi4j.api.util.Classes;
 import org.qi4j.api.util.Fields;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.HierarchicalVisitor;
 import org.qi4j.functional.Iterables;
 import org.qi4j.functional.VisitableHierarchy;
@@ -46,7 +46,7 @@ public final class InjectedFieldsModel
 
     public InjectedFieldsModel( Class fragmentClass )
     {
-        Iterable<Field> mappedFields = Fields.FIELDS_OF.map( fragmentClass );
+        Iterable<Field> mappedFields = Fields.FIELDS_OF.apply( fragmentClass );
         for( Field field : mappedFields )
         {
             Annotation injectionAnnotation = first( filter( translate( type(), hasAnnotation( InjectionScope.class ) ), iterable( field
@@ -90,7 +90,7 @@ public final class InjectedFieldsModel
         return Iterables.map( new Function<InjectedFieldModel, DependencyModel>()
         {
             @Override
-            public DependencyModel map( InjectedFieldModel injectedFieldModel )
+            public DependencyModel apply( InjectedFieldModel injectedFieldModel )
             {
                 return injectedFieldModel.dependency();
             }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedMethodsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedMethodsModel.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedMethodsModel.java
index c40dc98..81b3cb2 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedMethodsModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedMethodsModel.java
@@ -48,7 +48,7 @@ public final class InjectedMethodsModel
     public InjectedMethodsModel( Class fragmentClass )
     {
         nextMethod:
-        for( Method method : Methods.METHODS_OF.map( fragmentClass ) )
+        for( Method method : Methods.METHODS_OF.apply( fragmentClass ) )
         {
             Annotation[][] parameterAnnotations = method.getParameterAnnotations();
             if( parameterAnnotations.length > 0 )

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedParametersModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedParametersModel.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedParametersModel.java
index 1230edb..986269d 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedParametersModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedParametersModel.java
@@ -17,9 +17,9 @@ package org.qi4j.runtime.injection;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.function.Predicate;
 import org.qi4j.api.composite.InjectedParametersDescriptor;
 import org.qi4j.functional.HierarchicalVisitor;
-import org.qi4j.functional.Specification;
 import org.qi4j.functional.VisitableHierarchy;
 
 /**
@@ -79,12 +79,12 @@ public final class InjectedParametersModel
         return visitor.visitLeave( this );
     }
 
-    public Collection<DependencyModel> filter( Specification<DependencyModel> specification )
+    public Collection<DependencyModel> filter( Predicate<DependencyModel> specification )
     {
         ArrayList<DependencyModel> result = new ArrayList<DependencyModel>();
         for( DependencyModel model : parameterDependencies )
         {
-            if( specification.satisfiedBy( model ) )
+            if( specification.test( model ) )
             {
                 result.add( model );
             }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/InvocationInjectionProviderFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/InvocationInjectionProviderFactory.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/InvocationInjectionProviderFactory.java
index 8780b98..e5b75b9 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/InvocationInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/InvocationInjectionProviderFactory.java
@@ -25,7 +25,7 @@ public final class InvocationInjectionProviderFactory
     public InjectionProvider newInjectionProvider( Resolution resolution, DependencyModel dependencyModel )
         throws InvalidInjectionException
     {
-        Class injectionClass = Classes.RAW_CLASS.map( dependencyModel.injectionType() );
+        Class injectionClass = Classes.RAW_CLASS.apply( dependencyModel.injectionType() );
         if( injectionClass.equals( Method.class ) ||
             injectionClass.equals( AnnotatedElement.class ) ||
             injectionClass.equals( Iterable.class ) ||
@@ -57,7 +57,7 @@ public final class InvocationInjectionProviderFactory
         public Object provideInjection( InjectionContext context )
             throws InjectionProviderException
         {
-            Class injectionClass = Classes.RAW_CLASS.map( dependencyModel.injectionType() );
+            Class injectionClass = Classes.RAW_CLASS.apply( dependencyModel.injectionType() );
             final CompositeMethodModel methodModel = resolution.method();
             if( injectionClass.equals( Method.class ) )
             {

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ModifiesInjectionProviderFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ModifiesInjectionProviderFactory.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ModifiesInjectionProviderFactory.java
index 2348f91..16fccca 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ModifiesInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ModifiesInjectionProviderFactory.java
@@ -21,7 +21,7 @@ public final class ModifiesInjectionProviderFactory
     {
         if( bindingContext.model() instanceof CompositeDescriptor )
         {
-            Class<?> type = Classes.RAW_CLASS.map( dependencyModel.injectionType() );
+            Class<?> type = Classes.RAW_CLASS.apply( dependencyModel.injectionType() );
             if( type.isAssignableFrom( dependencyModel.injectedClass() ) )
             {
                 return new ModifiedInjectionProvider();