diff --git a/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java
index 795e4c0..5f52f6d 100644
--- a/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/device/DeviceServiceAdapter.java
@@ -15,7 +15,6 @@
  */
 package org.onosproject.net.device;
 
-import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 
 import org.onosproject.net.Device;
@@ -45,13 +44,7 @@
     @Override
     public Iterable<Device> getAvailableDevices() {
         return FluentIterable.from(getDevices())
-                .filter(new Predicate<Device>() {
-
-                    @Override
-                    public boolean apply(Device input) {
-                        return isAvailable(input.id());
-                    }
-                });
+                .filter(input -> isAvailable(input.id()));
     }
 
     @Override
diff --git a/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java b/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java
index 9b9f7ce..a33d369 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/FakeIntentManager.java
@@ -49,30 +49,23 @@
     // Provides an out-of-thread simulation of intent submit life-cycle
     private void executeSubmit(final Intent intent) {
         registerSubclassCompilerIfNeeded(intent);
-        executor.execute(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    executeCompilingPhase(intent);
-                } catch (IntentException e) {
-                    exceptions.add(e);
-                }
+        executor.execute(() -> {
+            try {
+                executeCompilingPhase(intent);
+            } catch (IntentException e) {
+                exceptions.add(e);
             }
         });
     }
 
     // Provides an out-of-thread simulation of intent withdraw life-cycle
     private void executeWithdraw(final Intent intent) {
-        executor.execute(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    List<Intent> installable = getInstallable(intent.key());
-                    executeWithdrawingPhase(intent, installable);
-                } catch (IntentException e) {
-                    exceptions.add(e);
-                }
-
+        executor.execute(() -> {
+            try {
+                List<Intent> installable = getInstallable(intent.key());
+                executeWithdrawingPhase(intent, installable);
+            } catch (IntentException e) {
+                exceptions.add(e);
             }
         });
     }
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
index 60857ca..0067fb2 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentServiceTest.java
@@ -79,13 +79,8 @@
         service.submit(intent);
 
         // Allow a small window of time until the intent is in the expected state
-        TestTools.assertAfter(GRACE_MS, new Runnable() {
-            @Override
-            public void run() {
-                assertEquals("incorrect intent state", IntentState.INSTALLED,
-                             service.getIntentState(intent.key()));
-            }
-        });
+        TestTools.assertAfter(GRACE_MS, () ->
+                assertEquals("incorrect intent state", IntentState.INSTALLED, service.getIntentState(intent.key())));
 
         // Make sure that all expected events have been emitted
         validateEvents(intent, INSTALL_REQ, INSTALLED);
@@ -100,13 +95,8 @@
         service.withdraw(intent);
 
         // Allow a small window of time until the event is in the expected state
-        TestTools.assertAfter(GRACE_MS, new Runnable() {
-            @Override
-            public void run() {
-                assertEquals("incorrect intent state", IntentState.WITHDRAWN,
-                             service.getIntentState(intent.key()));
-            }
-        });
+        TestTools.assertAfter(GRACE_MS, () ->
+                assertEquals("incorrect intent state", IntentState.WITHDRAWN, service.getIntentState(intent.key())));
 
         // Make sure that all expected events have been emitted
         validateEvents(intent, WITHDRAWN);
@@ -128,13 +118,8 @@
         service.submit(intent);
 
         // Allow a small window of time until the intent is in the expected state
-        TestTools.assertAfter(GRACE_MS, new Runnable() {
-            @Override
-            public void run() {
-                assertEquals("incorrect intent state", IntentState.FAILED,
-                             service.getIntentState(intent.key()));
-            }
-        });
+        TestTools.assertAfter(GRACE_MS, () ->
+                assertEquals("incorrect intent state", IntentState.FAILED, service.getIntentState(intent.key())));
 
         // Make sure that all expected events have been emitted
         validateEvents(intent, INSTALL_REQ, FAILED);
@@ -196,13 +181,8 @@
         service.submit(intent);
 
         // Allow some time for the intent to be compiled and installed
-        TestTools.assertAfter(GRACE_MS, new Runnable() {
-            @Override
-            public void run() {
-                assertEquals("incorrect intent state", IntentState.INSTALLED,
-                             service.getIntentState(intent.key()));
-            }
-        });
+        TestTools.assertAfter(GRACE_MS, () ->
+                assertEquals("incorrect intent state", IntentState.INSTALLED, service.getIntentState(intent.key())));
 
         // Make sure that now we have an implicit registration of the compiler
         // under the intent subclass
diff --git a/core/api/src/test/java/org/onosproject/net/link/LinkServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/link/LinkServiceAdapter.java
index 5cb84b3..7cd87cd 100644
--- a/core/api/src/test/java/org/onosproject/net/link/LinkServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/link/LinkServiceAdapter.java
@@ -22,7 +22,6 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.Link.State;
 
-import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 
 /**
@@ -42,13 +41,7 @@
     @Override
     public Iterable<Link> getActiveLinks() {
         return FluentIterable.from(getLinks())
-                .filter(new Predicate<Link>() {
-
-                    @Override
-                    public boolean apply(Link input) {
-                        return input.state() == State.ACTIVE;
-                    }
-                });
+                .filter(input -> input.state() == State.ACTIVE);
     }
 
     @Override
