diff --git a/cli/src/main/java/org/onosproject/cli/net/MapsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/MapsListCommand.java
index 7df8ab6..a48d870 100644
--- a/cli/src/main/java/org/onosproject/cli/net/MapsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/MapsListCommand.java
@@ -60,13 +60,12 @@
         ArrayNode maps = mapper.createArrayNode();
 
         // Create a JSON node for each map
-        mapInfo.stream()
-            .forEach(info -> {
-                ObjectNode map = mapper.createObjectNode();
-                map.put("name", info.name())
-                   .put("size", info.size());
-                maps.add(map);
-            });
+        mapInfo.forEach(info -> {
+            ObjectNode map = mapper.createObjectNode();
+            map.put("name", info.name())
+                    .put("size", info.size());
+            maps.add(map);
+        });
 
         return maps;
     }
diff --git a/cli/src/main/java/org/onosproject/cli/net/PartitionsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/PartitionsListCommand.java
index 9fb92db..28ce781 100644
--- a/cli/src/main/java/org/onosproject/cli/net/PartitionsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/PartitionsListCommand.java
@@ -123,23 +123,20 @@
         ArrayNode partitions = mapper.createArrayNode();
 
         // Create a JSON node for each partition
-        partitionInfo.stream()
-            .forEach(info -> {
-                ObjectNode partition = mapper.createObjectNode();
+        partitionInfo.forEach(info -> {
+            ObjectNode partition = mapper.createObjectNode();
 
-                // Add each member to the "members" array for this partition
-                ArrayNode members = partition.putArray("members");
-                info.members()
-                        .stream()
-                        .forEach(members::add);
+            // Add each member to the "members" array for this partition
+            ArrayNode members = partition.putArray("members");
+            info.members().forEach(members::add);
 
-                // Complete the partition attributes and add it to the array
-                partition.put("name", info.name())
-                         .put("term", info.term())
-                         .put("leader", info.leader());
-                partitions.add(partition);
+            // Complete the partition attributes and add it to the array
+            partition.put("name", info.name())
+                    .put("term", info.term())
+                    .put("leader", info.leader());
+            partitions.add(partition);
 
-            });
+        });
 
         return partitions;
     }
@@ -155,25 +152,24 @@
         ClusterService clusterService = get(ClusterService.class);
 
         // Create a JSON node for each partition client
-        partitionClientInfo.stream()
-            .forEach(info -> {
-                ObjectNode partition = mapper.createObjectNode();
+        partitionClientInfo.forEach(info -> {
+            ObjectNode partition = mapper.createObjectNode();
 
-                // Add each member to the "servers" array for this partition
-                ArrayNode servers = partition.putArray("servers");
-                info.servers()
-                        .stream()
-                        .map(clusterService::getNode)
-                        .map(node -> String.format("%s:%d", node.ip(), node.tcpPort()))
-                        .forEach(servers::add);
+            // Add each member to the "servers" array for this partition
+            ArrayNode servers = partition.putArray("servers");
+            info.servers()
+                    .stream()
+                    .map(clusterService::getNode)
+                    .map(node -> String.format("%s:%d", node.ip(), node.tcpPort()))
+                    .forEach(servers::add);
 
-                // Complete the partition attributes and add it to the array
-                partition.put("partitionId", info.partitionId().toString())
-                         .put("sessionId", info.sessionId())
-                         .put("status", info.status().toString());
-                partitions.add(partition);
+            // Complete the partition attributes and add it to the array
+            partition.put("partitionId", info.partitionId().toString())
+                    .put("sessionId", info.sessionId())
+                    .put("status", info.status().toString());
+            partitions.add(partition);
 
-            });
+        });
 
         return partitions;
     }
diff --git a/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualHostCreateCommand.java b/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualHostCreateCommand.java
index fc66626..0a93705 100644
--- a/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualHostCreateCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/vnet/VirtualHostCreateCommand.java
@@ -72,7 +72,7 @@
 
         Set<IpAddress> hostIps = new HashSet<>();
         if (hostIpStrings != null) {
-            Arrays.asList(hostIpStrings).stream().forEach(s -> hostIps.add(IpAddress.valueOf(s)));
+            Arrays.stream(hostIpStrings).forEach(s -> hostIps.add(IpAddress.valueOf(s)));
         }
         HostLocation hostLocation = new HostLocation(DeviceId.deviceId(hostLocationDeviceId),
                                                      PortNumber.portNumber(hostLocationPortNumber),
